diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..a4763d1 --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.cproject b/.cproject new file mode 100644 index 0000000..d313d12 --- /dev/null +++ b/.cproject @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6db0486 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/bin/ +/libs/ +/obj/ diff --git a/.project b/.project new file mode 100644 index 0000000..a1333d6 --- /dev/null +++ b/.project @@ -0,0 +1,49 @@ + + + ASpellChecker + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100644 index 0000000..1696b14 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/aspellchecker_logo.png b/aspellchecker_logo.png new file mode 100644 index 0000000..4c0badd Binary files /dev/null and b/aspellchecker_logo.png differ diff --git a/assets/data/cp1250.cmap b/assets/data/cp1250.cmap new file mode 100644 index 0000000..501163e --- /dev/null +++ b/assets/data/cp1250.cmap @@ -0,0 +1,1991 @@ +INTERNAL +/ +N 932 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 5 + 0301 > C1 + 0302 > C2 + 0306 > C3 + 0308 > C4 + 0328 > A5 + . +0042 > 42 +0043 > 43 / + N 3 + 0301 > C6 + 030C > C8 + 0327 > C7 + . +0044 > 44 / + N 1 + 030C > CF + . +0045 > 45 / + N 4 + 0301 > C9 + 0308 > CB + 030C > CC + 0328 > CA + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 2 + 0301 > CD + 0302 > CE + . +004A > 4A +004B > 4B +004C > 4C / + N 2 + 0301 > C5 + 030C > BC + . +004D > 4D +004E > 4E / + N 2 + 0301 > D1 + 030C > D2 + . +004F > 4F / + N 4 + 0301 > D3 + 0302 > D4 + 0308 > D6 + 030B > D5 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 2 + 0301 > C0 + 030C > D8 + . +0053 > 53 / + N 3 + 0301 > 8C + 030C > 8A + 0327 > AA + . +0054 > 54 / + N 2 + 030C > 8D + 0327 > DE + . +0055 > 55 / + N 4 + 0301 > DA + 0308 > DC + 030A > D9 + 030B > DB + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0301 > DD + . +005A > 5A / + N 3 + 0301 > 8F + 0307 > AF + 030C > 8E + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 5 + 0301 > E1 + 0302 > E2 + 0306 > E3 + 0308 > E4 + 0328 > B9 + . +0062 > 62 +0063 > 63 / + N 3 + 0301 > E6 + 030C > E8 + 0327 > E7 + . +0064 > 64 / + N 1 + 030C > EF + . +0065 > 65 / + N 4 + 0301 > E9 + 0308 > EB + 030C > EC + 0328 > EA + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 2 + 0301 > ED + 0302 > EE + . +006A > 6A +006B > 6B +006C > 6C / + N 2 + 0301 > E5 + 030C > BE + . +006D > 6D +006E > 6E / + N 2 + 0301 > F1 + 030C > F2 + . +006F > 6F / + N 4 + 0301 > F3 + 0302 > F4 + 0308 > F6 + 030B > F5 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 2 + 0301 > E0 + 030C > F8 + . +0073 > 73 / + N 3 + 0301 > 9C + 030C > 9A + 0327 > BA + . +0074 > 74 / + N 2 + 030C > 9D + 0327 > FE + . +0075 > 75 / + N 4 + 0301 > FA + 0308 > FC + 030A > F9 + 030B > FB + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0301 > FD + . +007A > 7A / + N 3 + 0301 > 9F + 0307 > BF + 030C > 9E + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +0083 > 83 +0088 > 88 +0090 > 90 +0098 > 98 +00A0 > A0 +00A4 > A4 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00B0 > B0 +00B1 > B1 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00BB > BB +00C0 > 41 # unsup: 0041 0300 +00C1 > C1 +00C2 > C2 +00C3 > 41 # unsup: 0041 0303 +00C4 > C4 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > C7 +00C8 > 45 # unsup: 0045 0300 +00C9 > C9 +00CA > 45 # unsup: 0045 0302 +00CB > CB +00CC > 49 # unsup: 0049 0300 +00CD > CD +00CE > CE +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > D3 +00D4 > D4 +00D5 > 4F # unsup: 004F 0303 +00D6 > D6 +00D7 > D7 +00D9 > 55 # unsup: 0055 0300 +00DA > DA +00DB > 55 # unsup: 0055 0302 +00DC > DC +00DD > DD +00DF > DF +00E0 > 61 # unsup: 0061 0300 +00E1 > E1 +00E2 > E2 +00E3 > 61 # unsup: 0061 0303 +00E4 > E4 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > E7 +00E8 > 65 # unsup: 0065 0300 +00E9 > E9 +00EA > 65 # unsup: 0065 0302 +00EB > EB +00EC > 69 # unsup: 0069 0300 +00ED > ED +00EE > EE +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > F3 +00F4 > F4 +00F5 > 6F # unsup: 006F 0303 +00F6 > F6 +00F7 > F7 +00F9 > 75 # unsup: 0075 0300 +00FA > FA +00FB > 75 # unsup: 0075 0302 +00FC > FC +00FD > FD +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > C3 +0103 > E3 +0104 > A5 +0105 > B9 +0106 > C6 +0107 > E6 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > C8 +010D > E8 +010E > CF +010F > EF +0110 > D0 +0111 > F0 +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > CA +0119 > EA +011A > CC +011B > EC +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > C5 +013A > E5 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > BC +013E > BE +013F > 4C B7 # compat +0140 > 6C B7 # compat +0141 > A3 +0142 > B3 +0143 > D1 +0144 > F1 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > D2 +0148 > F2 +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > D5 +0151 > F5 +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > C0 +0155 > E0 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > D8 +0159 > F8 +015A > 8C +015B > 9C +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > AA +015F > BA +0160 > 8A +0161 > 9A +0162 > DE +0163 > FE +0164 > 8D +0165 > 9D +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > D9 +016F > F9 +0170 > DB +0171 > FB +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 8F +017A > 9F +017B > AF +017C > BF +017D > 8E +017E > 9E +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 8E # compat +01C5 > 44 9E # compat +01C6 > 64 9E # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C7 > A1 +02D8 > A2 +02D9 > FF +02DB > B2 +02DD > BD +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 8C # unsup: 015A 0307 +1E65 > 9C # unsup: 015B 0307 +1E66 > 8A # unsup: 0160 0307 +1E67 > 9A # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > C3 # unsup: 0102 0301 +1EAF > E3 # unsup: 0103 0301 +1EB0 > C3 # unsup: 0102 0300 +1EB1 > E3 # unsup: 0103 0300 +1EB2 > C3 # unsup: 0102 0309 +1EB3 > E3 # unsup: 0103 0309 +1EB4 > C3 # unsup: 0102 0303 +1EB5 > E3 # unsup: 0103 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > 80 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE2 > AC # compat +FFE4 > A6 # compat +. + +STRICT +/ +N 260 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 5 + 0301 > C1 + 0302 > C2 + 0306 > C3 + 0308 > C4 + 0328 > A5 + . +0042 > 42 +0043 > 43 / + N 3 + 0301 > C6 + 030C > C8 + 0327 > C7 + . +0044 > 44 / + N 1 + 030C > CF + . +0045 > 45 / + N 4 + 0301 > C9 + 0308 > CB + 030C > CC + 0328 > CA + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 2 + 0301 > CD + 0302 > CE + . +004A > 4A +004B > 4B +004C > 4C / + N 2 + 0301 > C5 + 030C > BC + . +004D > 4D +004E > 4E / + N 2 + 0301 > D1 + 030C > D2 + . +004F > 4F / + N 4 + 0301 > D3 + 0302 > D4 + 0308 > D6 + 030B > D5 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 2 + 0301 > C0 + 030C > D8 + . +0053 > 53 / + N 3 + 0301 > 8C + 030C > 8A + 0327 > AA + . +0054 > 54 / + N 2 + 030C > 8D + 0327 > DE + . +0055 > 55 / + N 4 + 0301 > DA + 0308 > DC + 030A > D9 + 030B > DB + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0301 > DD + . +005A > 5A / + N 3 + 0301 > 8F + 0307 > AF + 030C > 8E + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 5 + 0301 > E1 + 0302 > E2 + 0306 > E3 + 0308 > E4 + 0328 > B9 + . +0062 > 62 +0063 > 63 / + N 3 + 0301 > E6 + 030C > E8 + 0327 > E7 + . +0064 > 64 / + N 1 + 030C > EF + . +0065 > 65 / + N 4 + 0301 > E9 + 0308 > EB + 030C > EC + 0328 > EA + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 2 + 0301 > ED + 0302 > EE + . +006A > 6A +006B > 6B +006C > 6C / + N 2 + 0301 > E5 + 030C > BE + . +006D > 6D +006E > 6E / + N 2 + 0301 > F1 + 030C > F2 + . +006F > 6F / + N 4 + 0301 > F3 + 0302 > F4 + 0308 > F6 + 030B > F5 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 2 + 0301 > E0 + 030C > F8 + . +0073 > 73 / + N 3 + 0301 > 9C + 030C > 9A + 0327 > BA + . +0074 > 74 / + N 2 + 030C > 9D + 0327 > FE + . +0075 > 75 / + N 4 + 0301 > FA + 0308 > FC + 030A > F9 + 030B > FB + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0301 > FD + . +007A > 7A / + N 3 + 0301 > 9F + 0307 > BF + 030C > 9E + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +0083 > 83 +0088 > 88 +0090 > 90 +0098 > 98 +00A0 > A0 +00A4 > A4 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00B0 > B0 +00B1 > B1 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00BB > BB +00C1 > C1 +00C2 > C2 +00C4 > C4 +00C7 > C7 +00C9 > C9 +00CB > CB +00CD > CD +00CE > CE +00D3 > D3 +00D4 > D4 +00D6 > D6 +00D7 > D7 +00DA > DA +00DC > DC +00DD > DD +00DF > DF +00E1 > E1 +00E2 > E2 +00E4 > E4 +00E7 > E7 +00E9 > E9 +00EB > EB +00ED > ED +00EE > EE +00F3 > F3 +00F4 > F4 +00F6 > F6 +00F7 > F7 +00FA > FA +00FC > FC +00FD > FD +0102 > C3 +0103 > E3 +0104 > A5 +0105 > B9 +0106 > C6 +0107 > E6 +010C > C8 +010D > E8 +010E > CF +010F > EF +0110 > D0 +0111 > F0 +0118 > CA +0119 > EA +011A > CC +011B > EC +0139 > C5 +013A > E5 +013D > BC +013E > BE +0141 > A3 +0142 > B3 +0143 > D1 +0144 > F1 +0147 > D2 +0148 > F2 +0150 > D5 +0151 > F5 +0154 > C0 +0155 > E0 +0158 > D8 +0159 > F8 +015A > 8C +015B > 9C +015E > AA +015F > BA +0160 > 8A +0161 > 9A +0162 > DE +0163 > FE +0164 > 8D +0165 > 9D +016E > D9 +016F > F9 +0170 > DB +0171 > FB +0179 > 8F +017A > 9F +017B > AF +017C > BF +017D > 8E +017E > 9E +02C7 > A1 +02D8 > A2 +02D9 > FF +02DB > B2 +02DD > BD +037E > 3B +0387 > B7 +1FEF > 60 +1FFD > B4 +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AC > 80 +2122 > 99 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0083 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 0088 +89 > 2030 +8A > 0053 030C +8B > 2039 +8C > 0053 0301 +8D > 0054 030C +8E > 005A 030C +8F > 005A 0301 +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 0098 +99 > 2122 +9A > 0073 030C +9B > 203A +9C > 0073 0301 +9D > 0074 030C +9E > 007A 030C +9F > 007A 0301 +A0 > 00A0 +A1 > 02C7 +A2 > 02D8 +A3 > 0141 +A4 > 00A4 +A5 > 0041 0328 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 0053 0327 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 005A 0307 +B0 > 00B0 +B1 > 00B1 +B2 > 02DB +B3 > 0142 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 0061 0328 +BA > 0073 0327 +BB > 00BB +BC > 004C 030C +BD > 02DD +BE > 006C 030C +BF > 007A 0307 +C0 > 0052 0301 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0306 +C4 > 0041 0308 +C5 > 004C 0301 +C6 > 0043 0301 +C7 > 0043 0327 +C8 > 0043 030C +C9 > 0045 0301 +CA > 0045 0328 +CB > 0045 0308 +CC > 0045 030C +CD > 0049 0301 +CE > 0049 0302 +CF > 0044 030C +D0 > 0110 +D1 > 004E 0301 +D2 > 004E 030C +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 030B +D6 > 004F 0308 +D7 > 00D7 +D8 > 0052 030C +D9 > 0055 030A +DA > 0055 0301 +DB > 0055 030B +DC > 0055 0308 +DD > 0059 0301 +DE > 0054 0327 +DF > 00DF +E0 > 0072 0301 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0306 +E4 > 0061 0308 +E5 > 006C 0301 +E6 > 0063 0301 +E7 > 0063 0327 +E8 > 0063 030C +E9 > 0065 0301 +EA > 0065 0328 +EB > 0065 0308 +EC > 0065 030C +ED > 0069 0301 +EE > 0069 0302 +EF > 0064 030C +F0 > 0111 +F1 > 006E 0301 +F2 > 006E 030C +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 030B +F6 > 006F 0308 +F7 > 00F7 +F8 > 0072 030C +F9 > 0075 030A +FA > 0075 0301 +FB > 0075 030B +FC > 0075 0308 +FD > 0079 0301 +FE > 0074 0327 +FF > 02D9 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0083 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 0088 +89 > 2030 +8A > 0160 +8B > 2039 +8C > 015A +8D > 0164 +8E > 017D +8F > 0179 +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 0098 +99 > 2122 +9A > 0161 +9B > 203A +9C > 015B +9D > 0165 +9E > 017E +9F > 017A +A0 > 00A0 +A1 > 02C7 +A2 > 02D8 +A3 > 0141 +A4 > 00A4 +A5 > 0104 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 015E +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 017B +B0 > 00B0 +B1 > 00B1 +B2 > 02DB +B3 > 0142 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 0105 +BA > 015F +BB > 00BB +BC > 013D +BD > 02DD +BE > 013E +BF > 017C +C0 > 0154 +C1 > 00C1 +C2 > 00C2 +C3 > 0102 +C4 > 00C4 +C5 > 0139 +C6 > 0106 +C7 > 00C7 +C8 > 010C +C9 > 00C9 +CA > 0118 +CB > 00CB +CC > 011A +CD > 00CD +CE > 00CE +CF > 010E +D0 > 0110 +D1 > 0143 +D2 > 0147 +D3 > 00D3 +D4 > 00D4 +D5 > 0150 +D6 > 00D6 +D7 > 00D7 +D8 > 0158 +D9 > 016E +DA > 00DA +DB > 0170 +DC > 00DC +DD > 00DD +DE > 0162 +DF > 00DF +E0 > 0155 +E1 > 00E1 +E2 > 00E2 +E3 > 0103 +E4 > 00E4 +E5 > 013A +E6 > 0107 +E7 > 00E7 +E8 > 010D +E9 > 00E9 +EA > 0119 +EB > 00EB +EC > 011B +ED > 00ED +EE > 00EE +EF > 010F +F0 > 0111 +F1 > 0144 +F2 > 0148 +F3 > 00F3 +F4 > 00F4 +F5 > 0151 +F6 > 00F6 +F7 > 00F7 +F8 > 0159 +F9 > 016F +FA > 00FA +FB > 0171 +FC > 00FC +FD > 00FD +FE > 0163 +FF > 02D9 +. + +COMP += NFC +. diff --git a/assets/data/cp1250.cset b/assets/data/cp1250.cset new file mode 100644 index 0000000..291db28 --- /dev/null +++ b/assets/data/cp1250.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1250 +> ascii +/ +# <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 20AC - Y 80 80 80 00 00 00 # EURO SIGN +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 0160 L Y 8A 9A 8A 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 015A L Y 8C 9C 8C 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE +8D 0164 L Y 8D 9D 8D 54 74 74 # LATIN CAPITAL LETTER T WITH CARON +8E 017D L Y 8E 9E 8E 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +8F 0179 L Y 8F 9F 8F 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 0161 L Y 8A 9A 8A 73 73 73 # LATIN SMALL LETTER S WITH CARON +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 015B L Y 8C 9C 8C 73 73 73 # LATIN SMALL LETTER S WITH ACUTE +9D 0165 L Y 8D 9D 8D 74 74 74 # LATIN SMALL LETTER T WITH CARON +9E 017E L Y 8E 9E 8E 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +9F 017A L Y 8F 9F 8F 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 02C7 M Y A1 A1 A1 00 00 00 # CARON +A2 02D8 - Y A2 A2 A2 00 00 00 # BREVE +A3 0141 L Y A3 B3 A3 A3 B3 B3 # LATIN CAPITAL LETTER L WITH STROKE +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 0104 L Y A5 B9 A5 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 015E L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 017B L Y AF BF AF 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 02DB - Y B2 B2 B2 00 00 00 # OGONEK +B3 0142 L Y A3 B3 A3 B3 B3 B3 # LATIN SMALL LETTER L WITH STROKE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 0105 L Y A5 B9 A5 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK +BA 015F L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 013D L Y BC BE BC 4C 6C 6C # LATIN CAPITAL LETTER L WITH CARON +BD 02DD - Y BD BD BD 00 00 00 # DOUBLE ACUTE ACCENT +BE 013E L Y BC BE BC 6C 6C 6C # LATIN SMALL LETTER L WITH CARON +BF 017C L Y AF BF AF 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE +C0 0154 L Y C0 E0 C0 52 72 72 # LATIN CAPITAL LETTER R WITH ACUTE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 0102 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH BREVE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 0139 L Y C5 E5 C5 4C 6C 6C # LATIN CAPITAL LETTER L WITH ACUTE +C6 0106 L Y C6 E6 C6 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 0118 L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 011A L Y CC EC CC 45 2A 00 # LATIN CAPITAL LETTER E WITH CARON +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 010E L Y CF EF CF 44 64 64 # LATIN CAPITAL LETTER D WITH CARON +D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE +D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE +D2 0147 L Y D2 F2 D2 4E 6E 6E # LATIN CAPITAL LETTER N WITH CARON +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 0150 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 0158 L Y D8 F8 D8 52 72 72 # LATIN CAPITAL LETTER R WITH CARON +D9 016E L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH RING ABOVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 0170 L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE +DE 0162 L Y DE FE DE 54 74 74 # LATIN CAPITAL LETTER T WITH CEDILLA +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 0155 L Y C0 E0 C0 72 72 72 # LATIN SMALL LETTER R WITH ACUTE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 0103 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH BREVE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 013A L Y C5 E5 C5 6C 6C 6C # LATIN SMALL LETTER L WITH ACUTE +E6 0107 L Y C6 E6 C6 63 63 63 # LATIN SMALL LETTER C WITH ACUTE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 0119 L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 011B L Y CC EC CC 65 2A 00 # LATIN SMALL LETTER E WITH CARON +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 010F L Y CF EF CF 64 64 64 # LATIN SMALL LETTER D WITH CARON +F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE +F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE +F2 0148 L Y D2 F2 D2 6E 6E 6E # LATIN SMALL LETTER N WITH CARON +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 0151 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH DOUBLE ACUTE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 0159 L Y D8 F8 D8 72 72 72 # LATIN SMALL LETTER R WITH CARON +F9 016F L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH RING ABOVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 0171 L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH DOUBLE ACUTE +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE +FE 0163 L Y DE FE DE 74 74 74 # LATIN SMALL LETTER T WITH CEDILLA +FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE diff --git a/assets/data/cp1251.cmap b/assets/data/cp1251.cmap new file mode 100644 index 0000000..c38c640 --- /dev/null +++ b/assets/data/cp1251.cmap @@ -0,0 +1,1903 @@ +INTERNAL +/ +N 1037 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0098 > 98 +00A0 > A0 +00A4 > A4 +00A6 > A6 +00A7 > A7 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00B0 > B0 +00B1 > B1 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00BB > BB +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0387 > B7 +0400 > C5 # unsup: 0415 0300 +0401 > A8 +0402 > 80 +0403 > 81 +0404 > AA +0405 > BD +0406 > B2 / + N 1 + 0308 > AF + . +0407 > AF +0408 > A3 +0409 > 8A +040A > 8C +040B > 8E +040C > 8D +040D > C8 # unsup: 0418 0300 +040E > A1 +040F > 8F +0410 > C0 +0411 > C1 +0412 > C2 +0413 > C3 / + N 1 + 0301 > 81 + . +0414 > C4 +0415 > C5 / + N 1 + 0308 > A8 + . +0416 > C6 +0417 > C7 +0418 > C8 / + N 1 + 0306 > C9 + . +0419 > C9 +041A > CA / + N 1 + 0301 > 8D + . +041B > CB +041C > CC +041D > CD +041E > CE +041F > CF +0420 > D0 +0421 > D1 +0422 > D2 +0423 > D3 / + N 1 + 0306 > A1 + . +0424 > D4 +0425 > D5 +0426 > D6 +0427 > D7 +0428 > D8 +0429 > D9 +042A > DA +042B > DB +042C > DC +042D > DD +042E > DE +042F > DF +0430 > E0 +0431 > E1 +0432 > E2 +0433 > E3 / + N 1 + 0301 > 83 + . +0434 > E4 +0435 > E5 / + N 1 + 0308 > B8 + . +0436 > E6 +0437 > E7 +0438 > E8 / + N 1 + 0306 > E9 + . +0439 > E9 +043A > EA / + N 1 + 0301 > 9D + . +043B > EB +043C > EC +043D > ED +043E > EE +043F > EF +0440 > F0 +0441 > F1 +0442 > F2 +0443 > F3 / + N 1 + 0306 > A2 + . +0444 > F4 +0445 > F5 +0446 > F6 +0447 > F7 +0448 > F8 +0449 > F9 +044A > FA +044B > FB +044C > FC +044D > FD +044E > FE +044F > FF +0450 > E5 # unsup: 0435 0300 +0451 > B8 +0452 > 90 +0453 > 83 +0454 > BA +0455 > BE +0456 > B3 / + N 1 + 0308 > BF + . +0457 > BF +0458 > BC +0459 > 9A +045A > 9C +045B > 9E +045C > 9D +045D > E8 # unsup: 0438 0300 +045E > A2 +045F > 9F +0490 > A5 +0491 > B4 +04C1 > C6 # unsup: 0416 0306 +04C2 > E6 # unsup: 0436 0306 +04D0 > C0 # unsup: 0410 0306 +04D1 > E0 # unsup: 0430 0306 +04D2 > C0 # unsup: 0410 0308 +04D3 > E0 # unsup: 0430 0308 +04D6 > C5 # unsup: 0415 0306 +04D7 > E5 # unsup: 0435 0306 +04DC > C6 # unsup: 0416 0308 +04DD > E6 # unsup: 0436 0308 +04DE > C7 # unsup: 0417 0308 +04DF > E7 # unsup: 0437 0308 +04E2 > C8 # unsup: 0418 0304 +04E3 > E8 # unsup: 0438 0304 +04E4 > C8 # unsup: 0418 0308 +04E5 > E8 # unsup: 0438 0308 +04E6 > CE # unsup: 041E 0308 +04E7 > EE # unsup: 043E 0308 +04EC > DD # unsup: 042D 0308 +04ED > FD # unsup: 044D 0308 +04EE > D3 # unsup: 0423 0304 +04EF > F3 # unsup: 0443 0304 +04F0 > D3 # unsup: 0423 0308 +04F1 > F3 # unsup: 0443 0308 +04F2 > D3 # unsup: 0423 030B +04F3 > F3 # unsup: 0443 030B +04F4 > D7 # unsup: 0427 0308 +04F5 > F7 # unsup: 0447 0308 +04F8 > DB # unsup: 042B 0308 +04F9 > FB # unsup: 044B 0308 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > 88 +2116 > B9 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE2 > AC # compat +FFE4 > A6 # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0098 > 98 +00A0 > A0 +00A4 > A4 +00A6 > A6 +00A7 > A7 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00B0 > B0 +00B1 > B1 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00BB > BB +037E > 3B +0387 > B7 +0401 > A8 +0402 > 80 +0403 > 81 +0404 > AA +0405 > BD +0406 > B2 / + N 1 + 0308 > AF + . +0407 > AF +0408 > A3 +0409 > 8A +040A > 8C +040B > 8E +040C > 8D +040E > A1 +040F > 8F +0410 > C0 +0411 > C1 +0412 > C2 +0413 > C3 / + N 1 + 0301 > 81 + . +0414 > C4 +0415 > C5 / + N 1 + 0308 > A8 + . +0416 > C6 +0417 > C7 +0418 > C8 / + N 1 + 0306 > C9 + . +0419 > C9 +041A > CA / + N 1 + 0301 > 8D + . +041B > CB +041C > CC +041D > CD +041E > CE +041F > CF +0420 > D0 +0421 > D1 +0422 > D2 +0423 > D3 / + N 1 + 0306 > A1 + . +0424 > D4 +0425 > D5 +0426 > D6 +0427 > D7 +0428 > D8 +0429 > D9 +042A > DA +042B > DB +042C > DC +042D > DD +042E > DE +042F > DF +0430 > E0 +0431 > E1 +0432 > E2 +0433 > E3 / + N 1 + 0301 > 83 + . +0434 > E4 +0435 > E5 / + N 1 + 0308 > B8 + . +0436 > E6 +0437 > E7 +0438 > E8 / + N 1 + 0306 > E9 + . +0439 > E9 +043A > EA / + N 1 + 0301 > 9D + . +043B > EB +043C > EC +043D > ED +043E > EE +043F > EF +0440 > F0 +0441 > F1 +0442 > F2 +0443 > F3 / + N 1 + 0306 > A2 + . +0444 > F4 +0445 > F5 +0446 > F6 +0447 > F7 +0448 > F8 +0449 > F9 +044A > FA +044B > FB +044C > FC +044D > FD +044E > FE +044F > FF +0451 > B8 +0452 > 90 +0453 > 83 +0454 > BA +0455 > BE +0456 > B3 / + N 1 + 0308 > BF + . +0457 > BF +0458 > BC +0459 > 9A +045A > 9C +045B > 9E +045C > 9D +045E > A2 +045F > 9F +0490 > A5 +0491 > B4 +1FEF > 60 +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AC > 88 +2116 > B9 +2122 > 99 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0402 +81 > 0413 0301 +82 > 201A +83 > 0433 0301 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 20AC +89 > 2030 +8A > 0409 +8B > 2039 +8C > 040A +8D > 041A 0301 +8E > 040B +8F > 040F +90 > 0452 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 0098 +99 > 2122 +9A > 0459 +9B > 203A +9C > 045A +9D > 043A 0301 +9E > 045B +9F > 045F +A0 > 00A0 +A1 > 0423 0306 +A2 > 0443 0306 +A3 > 0408 +A4 > 00A4 +A5 > 0490 +A6 > 00A6 +A7 > 00A7 +A8 > 0415 0308 +A9 > 00A9 +AA > 0404 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 0406 0308 +B0 > 00B0 +B1 > 00B1 +B2 > 0406 +B3 > 0456 +B4 > 0491 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 0435 0308 +B9 > 2116 +BA > 0454 +BB > 00BB +BC > 0458 +BD > 0405 +BE > 0455 +BF > 0456 0308 +C0 > 0410 +C1 > 0411 +C2 > 0412 +C3 > 0413 +C4 > 0414 +C5 > 0415 +C6 > 0416 +C7 > 0417 +C8 > 0418 +C9 > 0418 0306 +CA > 041A +CB > 041B +CC > 041C +CD > 041D +CE > 041E +CF > 041F +D0 > 0420 +D1 > 0421 +D2 > 0422 +D3 > 0423 +D4 > 0424 +D5 > 0425 +D6 > 0426 +D7 > 0427 +D8 > 0428 +D9 > 0429 +DA > 042A +DB > 042B +DC > 042C +DD > 042D +DE > 042E +DF > 042F +E0 > 0430 +E1 > 0431 +E2 > 0432 +E3 > 0433 +E4 > 0434 +E5 > 0435 +E6 > 0436 +E7 > 0437 +E8 > 0438 +E9 > 0438 0306 +EA > 043A +EB > 043B +EC > 043C +ED > 043D +EE > 043E +EF > 043F +F0 > 0440 +F1 > 0441 +F2 > 0442 +F3 > 0443 +F4 > 0444 +F5 > 0445 +F6 > 0446 +F7 > 0447 +F8 > 0448 +F9 > 0449 +FA > 044A +FB > 044B +FC > 044C +FD > 044D +FE > 044E +FF > 044F +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0402 +81 > 0403 +82 > 201A +83 > 0453 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 20AC +89 > 2030 +8A > 0409 +8B > 2039 +8C > 040A +8D > 040C +8E > 040B +8F > 040F +90 > 0452 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 0098 +99 > 2122 +9A > 0459 +9B > 203A +9C > 045A +9D > 045C +9E > 045B +9F > 045F +A0 > 00A0 +A1 > 040E +A2 > 045E +A3 > 0408 +A4 > 00A4 +A5 > 0490 +A6 > 00A6 +A7 > 00A7 +A8 > 0401 +A9 > 00A9 +AA > 0404 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 0407 +B0 > 00B0 +B1 > 00B1 +B2 > 0406 +B3 > 0456 +B4 > 0491 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 0451 +B9 > 2116 +BA > 0454 +BB > 00BB +BC > 0458 +BD > 0405 +BE > 0455 +BF > 0457 +C0 > 0410 +C1 > 0411 +C2 > 0412 +C3 > 0413 +C4 > 0414 +C5 > 0415 +C6 > 0416 +C7 > 0417 +C8 > 0418 +C9 > 0419 +CA > 041A +CB > 041B +CC > 041C +CD > 041D +CE > 041E +CF > 041F +D0 > 0420 +D1 > 0421 +D2 > 0422 +D3 > 0423 +D4 > 0424 +D5 > 0425 +D6 > 0426 +D7 > 0427 +D8 > 0428 +D9 > 0429 +DA > 042A +DB > 042B +DC > 042C +DD > 042D +DE > 042E +DF > 042F +E0 > 0430 +E1 > 0431 +E2 > 0432 +E3 > 0433 +E4 > 0434 +E5 > 0435 +E6 > 0436 +E7 > 0437 +E8 > 0438 +E9 > 0439 +EA > 043A +EB > 043B +EC > 043C +ED > 043D +EE > 043E +EF > 043F +F0 > 0440 +F1 > 0441 +F2 > 0442 +F3 > 0443 +F4 > 0444 +F5 > 0445 +F6 > 0446 +F7 > 0447 +F8 > 0448 +F9 > 0449 +FA > 044A +FB > 044B +FC > 044C +FD > 044D +FE > 044E +FF > 044F +. + +COMP += NFC +. diff --git a/assets/data/cp1251.cset b/assets/data/cp1251.cset new file mode 100644 index 0000000..3940efa --- /dev/null +++ b/assets/data/cp1251.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1251 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0402 L Y 80 90 80 80 90 90 # CYRILLIC CAPITAL LETTER DJE +81 0403 L Y 81 83 81 81 83 83 # CYRILLIC CAPITAL LETTER GJE +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0453 L Y 81 83 81 83 83 83 # CYRILLIC SMALL LETTER GJE +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 20AC - Y 88 88 88 00 00 00 # EURO SIGN +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 0409 L Y 8A 9A 8A 8A 9A 9A # CYRILLIC CAPITAL LETTER LJE +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 040A L Y 8C 9C 8C 8C 9C 9C # CYRILLIC CAPITAL LETTER NJE +8D 040C L Y 8D 9D 8D 8D 9D 9D # CYRILLIC CAPITAL LETTER KJE +8E 040B L Y 8E 9E 8E 8E 9E 9E # CYRILLIC CAPITAL LETTER TSHE +8F 040F L Y 8F 9F 8F 8F 9F 9F # CYRILLIC CAPITAL LETTER DZHE +90 0452 L Y 80 90 80 90 90 90 # CYRILLIC SMALL LETTER DJE +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 0459 L Y 8A 9A 8A 9A 9A 9A # CYRILLIC SMALL LETTER LJE +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 045A L Y 8C 9C 8C 9C 9C 9C # CYRILLIC SMALL LETTER NJE +9D 045C L Y 8D 9D 8D 9D 9D 9D # CYRILLIC SMALL LETTER KJE +9E 045B L Y 8E 9E 8E 9E 9E 9E # CYRILLIC SMALL LETTER TSHE +9F 045F L Y 8F 9F 8F 9F 9F 9F # CYRILLIC SMALL LETTER DZHE +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 040E L Y A1 A2 A1 A1 A2 A2 # CYRILLIC CAPITAL LETTER SHORT U +A2 045E L Y A1 A2 A1 A2 A2 A2 # CYRILLIC SMALL LETTER SHORT U +A3 0408 L Y A3 BC A3 A3 BC BC # CYRILLIC CAPITAL LETTER JE +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 0490 L Y A5 B4 A5 A5 B4 B4 # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 0401 L Y A8 B8 A8 A8 B8 B8 # CYRILLIC CAPITAL LETTER IO +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 0404 L Y AA BA AA AA BA BA # CYRILLIC CAPITAL LETTER UKRAINIAN IE +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 0407 L Y AF BF AF AF BF BF # CYRILLIC CAPITAL LETTER YI +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 0406 L Y B2 B3 B2 B2 B3 B3 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +B3 0456 L Y B2 B3 B2 B3 B3 B3 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +B4 0491 L Y A5 B4 A5 B4 B4 B4 # CYRILLIC SMALL LETTER GHE WITH UPTURN +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 0451 L Y A8 B8 A8 B8 B8 B8 # CYRILLIC SMALL LETTER IO +B9 2116 . N B9 B9 B9 00 00 00 # <unused special> +BA 0454 L Y AA BA AA BA BA BA # CYRILLIC SMALL LETTER UKRAINIAN IE +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 0458 L Y A3 BC A3 BC BC BC # CYRILLIC SMALL LETTER JE +BD 0405 L Y BD BE BD BD BE BE # CYRILLIC CAPITAL LETTER DZE +BE 0455 L Y BD BE BD BE BE BE # CYRILLIC SMALL LETTER DZE +BF 0457 L Y AF BF AF BF BF BF # CYRILLIC SMALL LETTER YI +C0 0410 L Y C0 E0 C0 C0 2A 00 # CYRILLIC CAPITAL LETTER A +C1 0411 L Y C1 E1 C1 C1 E1 E1 # CYRILLIC CAPITAL LETTER BE +C2 0412 L Y C2 E2 C2 C2 E2 E2 # CYRILLIC CAPITAL LETTER VE +C3 0413 L Y C3 E3 C3 C3 E3 E3 # CYRILLIC CAPITAL LETTER GHE +C4 0414 L Y C4 E4 C4 C4 E4 E4 # CYRILLIC CAPITAL LETTER DE +C5 0415 L Y C5 E5 C5 C5 2A 00 # CYRILLIC CAPITAL LETTER IE +C6 0416 L Y C6 E6 C6 C6 E6 E6 # CYRILLIC CAPITAL LETTER ZHE +C7 0417 L Y C7 E7 C7 C7 E7 E7 # CYRILLIC CAPITAL LETTER ZE +C8 0418 L Y C8 E8 C8 C8 2A 00 # CYRILLIC CAPITAL LETTER I +C9 0419 L Y C9 E9 C9 C9 E9 E9 # CYRILLIC CAPITAL LETTER SHORT I +CA 041A L Y CA EA CA CA EA EA # CYRILLIC CAPITAL LETTER KA +CB 041B L Y CB EB CB CB EB EB # CYRILLIC CAPITAL LETTER EL +CC 041C L Y CC EC CC CC EC EC # CYRILLIC CAPITAL LETTER EM +CD 041D L Y CD ED CD CD ED ED # CYRILLIC CAPITAL LETTER EN +CE 041E L Y CE EE CE CE 2A 00 # CYRILLIC CAPITAL LETTER O +CF 041F L Y CF EF CF CF EF EF # CYRILLIC CAPITAL LETTER PE +D0 0420 L Y D0 F0 D0 D0 F0 F0 # CYRILLIC CAPITAL LETTER ER +D1 0421 L Y D1 F1 D1 D1 F1 F1 # CYRILLIC CAPITAL LETTER ES +D2 0422 L Y D2 F2 D2 D2 F2 F2 # CYRILLIC CAPITAL LETTER TE +D3 0423 L Y D3 F3 D3 D3 2A 00 # CYRILLIC CAPITAL LETTER U +D4 0424 L Y D4 F4 D4 D4 F4 F4 # CYRILLIC CAPITAL LETTER EF +D5 0425 L Y D5 F5 D5 D5 F5 F5 # CYRILLIC CAPITAL LETTER HA +D6 0426 L Y D6 F6 D6 D6 F6 F6 # CYRILLIC CAPITAL LETTER TSE +D7 0427 L Y D7 F7 D7 D7 F7 F7 # CYRILLIC CAPITAL LETTER CHE +D8 0428 L Y D8 F8 D8 D8 F8 F8 # CYRILLIC CAPITAL LETTER SHA +D9 0429 L Y D9 F9 D9 D9 F9 F9 # CYRILLIC CAPITAL LETTER SHCHA +DA 042A L Y DA FA DA DA FA FA # CYRILLIC CAPITAL LETTER HARD SIGN +DB 042B L Y DB FB DB DB 2A 00 # CYRILLIC CAPITAL LETTER YERU +DC 042C L Y DC FC DC DC FC FC # CYRILLIC CAPITAL LETTER SOFT SIGN +DD 042D L Y DD FD DD DD 2A 00 # CYRILLIC CAPITAL LETTER E +DE 042E L Y DE FE DE DE 2A 00 # CYRILLIC CAPITAL LETTER YU +DF 042F L Y DF FF DF DF 2A 00 # CYRILLIC CAPITAL LETTER YA +E0 0430 L Y C0 E0 C0 E0 2A 00 # CYRILLIC SMALL LETTER A +E1 0431 L Y C1 E1 C1 E1 E1 E1 # CYRILLIC SMALL LETTER BE +E2 0432 L Y C2 E2 C2 E2 E2 E2 # CYRILLIC SMALL LETTER VE +E3 0433 L Y C3 E3 C3 E3 E3 E3 # CYRILLIC SMALL LETTER GHE +E4 0434 L Y C4 E4 C4 E4 E4 E4 # CYRILLIC SMALL LETTER DE +E5 0435 L Y C5 E5 C5 E5 2A 00 # CYRILLIC SMALL LETTER IE +E6 0436 L Y C6 E6 C6 E6 E6 E6 # CYRILLIC SMALL LETTER ZHE +E7 0437 L Y C7 E7 C7 E7 E7 E7 # CYRILLIC SMALL LETTER ZE +E8 0438 L Y C8 E8 C8 E8 2A 00 # CYRILLIC SMALL LETTER I +E9 0439 L Y C9 E9 C9 E9 E9 E9 # CYRILLIC SMALL LETTER SHORT I +EA 043A L Y CA EA CA EA EA EA # CYRILLIC SMALL LETTER KA +EB 043B L Y CB EB CB EB EB EB # CYRILLIC SMALL LETTER EL +EC 043C L Y CC EC CC EC EC EC # CYRILLIC SMALL LETTER EM +ED 043D L Y CD ED CD ED ED ED # CYRILLIC SMALL LETTER EN +EE 043E L Y CE EE CE EE 2A 00 # CYRILLIC SMALL LETTER O +EF 043F L Y CF EF CF EF EF EF # CYRILLIC SMALL LETTER PE +F0 0440 L Y D0 F0 D0 F0 F0 F0 # CYRILLIC SMALL LETTER ER +F1 0441 L Y D1 F1 D1 F1 F1 F1 # CYRILLIC SMALL LETTER ES +F2 0442 L Y D2 F2 D2 F2 F2 F2 # CYRILLIC SMALL LETTER TE +F3 0443 L Y D3 F3 D3 F3 2A 00 # CYRILLIC SMALL LETTER U +F4 0444 L Y D4 F4 D4 F4 F4 F4 # CYRILLIC SMALL LETTER EF +F5 0445 L Y D5 F5 D5 F5 F5 F5 # CYRILLIC SMALL LETTER HA +F6 0446 L Y D6 F6 D6 F6 F6 F6 # CYRILLIC SMALL LETTER TSE +F7 0447 L Y D7 F7 D7 F7 F7 F7 # CYRILLIC SMALL LETTER CHE +F8 0448 L Y D8 F8 D8 F8 F8 F8 # CYRILLIC SMALL LETTER SHA +F9 0449 L Y D9 F9 D9 F9 F9 F9 # CYRILLIC SMALL LETTER SHCHA +FA 044A L Y DA FA DA FA FA FA # CYRILLIC SMALL LETTER HARD SIGN +FB 044B L Y DB FB DB FB 2A 00 # CYRILLIC SMALL LETTER YERU +FC 044C L Y DC FC DC FC FC FC # CYRILLIC SMALL LETTER SOFT SIGN +FD 044D L Y DD FD DD FD 2A 00 # CYRILLIC SMALL LETTER E +FE 044E L Y DE FE DE FE 2A 00 # CYRILLIC SMALL LETTER YU +FF 044F L Y DF FF DF FF 2A 00 # CYRILLIC SMALL LETTER YA diff --git a/assets/data/cp1252.cmap b/assets/data/cp1252.cmap new file mode 100644 index 0000000..91c33c7 --- /dev/null +++ b/assets/data/cp1252.cmap @@ -0,0 +1,1943 @@ +INTERNAL +/ +N 952 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 030C > 8A + . +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 2 + 0301 > DD + 0308 > 9F + . +005A > 5A / + N 1 + 030C > 8E + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 030C > 9A + . +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 2 + 0301 > FD + 0308 > FF + . +007A > 7A / + N 1 + 030C > 9E + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +008D > 8D +008F > 8F +0090 > 90 +009D > 9D +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D0 > D0 +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DE > DE +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F0 > F0 +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FE > FE +00FF > FF +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 8C +0153 > 9C +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 8A +0161 > 9A +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 9F +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 8E +017E > 9E +017F > 73 # compat +0192 > 83 +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 8E # compat +01C5 > 44 9E # compat +01C6 > 64 9E # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +01FE > D8 # unsup: 00D8 0301 +01FF > F8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C6 > 88 +02DC > 98 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 8A # unsup: 0160 0307 +1E67 > 9A # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > CA # unsup: 00CA 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > CA # unsup: 00CA 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > CA # unsup: 00CA 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > CA # unsup: 00CA 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > 80 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 260 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 030C > 8A + . +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 2 + 0301 > DD + 0308 > 9F + . +005A > 5A / + N 1 + 030C > 8E + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 030C > 9A + . +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 2 + 0301 > FD + 0308 > FF + . +007A > 7A / + N 1 + 030C > 9E + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +008D > 8D +008F > 8F +0090 > 90 +009D > 9D +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D0 > D0 +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DE > DE +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F0 > F0 +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FE > FE +00FF > FF +0152 > 8C +0153 > 9C +0160 > 8A +0161 > 9A +0178 > 9F +017D > 8E +017E > 9E +0192 > 83 +02C6 > 88 +02DC > 98 +037E > 3B +0387 > B7 +1FEF > 60 +1FFD > B4 +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AC > 80 +2122 > 99 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 0053 030C +8B > 2039 +8C > 0152 +8D > 008D +8E > 005A 030C +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 0073 030C +9B > 203A +9C > 0153 +9D > 009D +9E > 007A 030C +9F > 0059 0308 +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0303 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0049 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 00D0 +D1 > 004E 0303 +D2 > 004F 0300 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 00D7 +D8 > 00D8 +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0059 0301 +DE > 00DE +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0303 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0069 0300 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 00F0 +F1 > 006E 0303 +F2 > 006F 0300 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 00F7 +F8 > 00F8 +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0079 0301 +FE > 00FE +FF > 0079 0308 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 0160 +8B > 2039 +8C > 0152 +8D > 008D +8E > 017D +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 0161 +9B > 203A +9C > 0153 +9D > 009D +9E > 017E +9F > 0178 +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 +C3 > 00C3 +C4 > 00C4 +C5 > 00C5 +C6 > 00C6 +C7 > 00C7 +C8 > 00C8 +C9 > 00C9 +CA > 00CA +CB > 00CB +CC > 00CC +CD > 00CD +CE > 00CE +CF > 00CF +D0 > 00D0 +D1 > 00D1 +D2 > 00D2 +D3 > 00D3 +D4 > 00D4 +D5 > 00D5 +D6 > 00D6 +D7 > 00D7 +D8 > 00D8 +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 00DD +DE > 00DE +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 +E3 > 00E3 +E4 > 00E4 +E5 > 00E5 +E6 > 00E6 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 00EC +ED > 00ED +EE > 00EE +EF > 00EF +F0 > 00F0 +F1 > 00F1 +F2 > 00F2 +F3 > 00F3 +F4 > 00F4 +F5 > 00F5 +F6 > 00F6 +F7 > 00F7 +F8 > 00F8 +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 00FD +FE > 00FE +FF > 00FF +. + +COMP += NFC +. diff --git a/assets/data/cp1252.cset b/assets/data/cp1252.cset new file mode 100644 index 0000000..2d1fb1f --- /dev/null +++ b/assets/data/cp1252.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1252 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 20AC - Y 80 80 80 00 00 00 # EURO SIGN +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 0160 L Y 8A 9A 8A 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 0152 L Y 8C 9C 8C 8C 2A 00 # LATIN CAPITAL LIGATURE OE +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 017D L Y 8E 9E 8E 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 02DC - Y 98 98 98 00 00 00 # SMALL TILDE +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 0161 L Y 8A 9A 8A 73 73 73 # LATIN SMALL LETTER S WITH CARON +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 0153 L Y 8C 9C 8C 9C 2A 00 # LATIN SMALL LIGATURE OE +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 017E L Y 8E 9E 8E 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +9F 0178 L Y 9F FF 9F 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 00D0 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER ETH +D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE +D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE +DE 00DE L Y DE FE DE DE FE FE # LATIN CAPITAL LETTER THORN +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 00F0 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER ETH +F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE +F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE +FE 00FE L Y DE FE DE FE FE FE # LATIN SMALL LETTER THORN +FF 00FF L Y 9F FF 9F 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/assets/data/cp1253.cmap b/assets/data/cp1253.cmap new file mode 100644 index 0000000..1efbba9 --- /dev/null +++ b/assets/data/cp1253.cmap @@ -0,0 +1,2148 @@ +INTERNAL +/ +N 1223 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +0088 > 88 +008A > 8A +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0098 > 98 +009A > 9A +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 / + N 1 + 0301 > A1 + . +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00BB > BB +00BD > BD +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +0192 > 83 +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0384 > B4 +0385 > A1 +0386 > A2 +0387 > B7 +0388 > B8 +0389 > B9 +038A > BA +038C > BC +038E > BE +038F > BF +0390 > C0 +0391 > C1 / + N 1 + 0301 > A2 + . +0392 > C2 +0393 > C3 +0394 > C4 +0395 > C5 / + N 1 + 0301 > B8 + . +0396 > C6 +0397 > C7 / + N 1 + 0301 > B9 + . +0398 > C8 +0399 > C9 / + N 2 + 0301 > BA + 0308 > DA + . +039A > CA +039B > CB +039C > CC +039D > CD +039E > CE +039F > CF / + N 1 + 0301 > BC + . +03A0 > D0 +03A1 > D1 +03A3 > D3 +03A4 > D4 +03A5 > D5 / + N 2 + 0301 > BE + 0308 > DB + . +03A6 > D6 +03A7 > D7 +03A8 > D8 +03A9 > D9 / + N 1 + 0301 > BF + . +03AA > DA +03AB > DB +03AC > DC +03AD > DD +03AE > DE +03AF > DF +03B0 > E0 +03B1 > E1 / + N 1 + 0301 > DC + . +03B2 > E2 +03B3 > E3 +03B4 > E4 +03B5 > E5 / + N 1 + 0301 > DD + . +03B6 > E6 +03B7 > E7 / + N 1 + 0301 > DE + . +03B8 > E8 +03B9 > E9 / + N 2 + 0301 > DF + 0308 > FA / + N 1 + 0301 > C0 + . + . +03BA > EA +03BB > EB +03BC > EC +03BD > ED +03BE > EE +03BF > EF / + N 1 + 0301 > FC + . +03C0 > F0 +03C1 > F1 +03C2 > F2 +03C3 > F3 +03C4 > F4 +03C5 > F5 / + N 2 + 0301 > FD + 0308 > FB / + N 1 + 0301 > E0 + . + . +03C6 > F6 +03C7 > F7 +03C8 > F8 +03C9 > F9 / + N 1 + 0301 > FE + . +03CA > FA / + N 1 + 0301 > C0 + . +03CB > FB / + N 1 + 0301 > E0 + . +03CC > FC +03CD > FD +03CE > FE +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1F00 > E1 # unsup: 03B1 0313 +1F01 > E1 # unsup: 03B1 0314 +1F02 > E1 # unsup: 03B1 0313 0300 +1F03 > E1 # unsup: 03B1 0314 0300 +1F04 > E1 # unsup: 03B1 0313 0301 +1F05 > E1 # unsup: 03B1 0314 0301 +1F06 > E1 # unsup: 03B1 0313 0342 +1F07 > E1 # unsup: 03B1 0314 0342 +1F08 > C1 # unsup: 0391 0313 +1F09 > C1 # unsup: 0391 0314 +1F0A > C1 # unsup: 0391 0313 0300 +1F0B > C1 # unsup: 0391 0314 0300 +1F0C > C1 # unsup: 0391 0313 0301 +1F0D > C1 # unsup: 0391 0314 0301 +1F0E > C1 # unsup: 0391 0313 0342 +1F0F > C1 # unsup: 0391 0314 0342 +1F10 > E5 # unsup: 03B5 0313 +1F11 > E5 # unsup: 03B5 0314 +1F12 > E5 # unsup: 03B5 0313 0300 +1F13 > E5 # unsup: 03B5 0314 0300 +1F14 > E5 # unsup: 03B5 0313 0301 +1F15 > E5 # unsup: 03B5 0314 0301 +1F18 > C5 # unsup: 0395 0313 +1F19 > C5 # unsup: 0395 0314 +1F1A > C5 # unsup: 0395 0313 0300 +1F1B > C5 # unsup: 0395 0314 0300 +1F1C > C5 # unsup: 0395 0313 0301 +1F1D > C5 # unsup: 0395 0314 0301 +1F20 > E7 # unsup: 03B7 0313 +1F21 > E7 # unsup: 03B7 0314 +1F22 > E7 # unsup: 03B7 0313 0300 +1F23 > E7 # unsup: 03B7 0314 0300 +1F24 > E7 # unsup: 03B7 0313 0301 +1F25 > E7 # unsup: 03B7 0314 0301 +1F26 > E7 # unsup: 03B7 0313 0342 +1F27 > E7 # unsup: 03B7 0314 0342 +1F28 > C7 # unsup: 0397 0313 +1F29 > C7 # unsup: 0397 0314 +1F2A > C7 # unsup: 0397 0313 0300 +1F2B > C7 # unsup: 0397 0314 0300 +1F2C > C7 # unsup: 0397 0313 0301 +1F2D > C7 # unsup: 0397 0314 0301 +1F2E > C7 # unsup: 0397 0313 0342 +1F2F > C7 # unsup: 0397 0314 0342 +1F30 > E9 # unsup: 03B9 0313 +1F31 > E9 # unsup: 03B9 0314 +1F32 > E9 # unsup: 03B9 0313 0300 +1F33 > E9 # unsup: 03B9 0314 0300 +1F34 > E9 # unsup: 03B9 0313 0301 +1F35 > E9 # unsup: 03B9 0314 0301 +1F36 > E9 # unsup: 03B9 0313 0342 +1F37 > E9 # unsup: 03B9 0314 0342 +1F38 > C9 # unsup: 0399 0313 +1F39 > C9 # unsup: 0399 0314 +1F3A > C9 # unsup: 0399 0313 0300 +1F3B > C9 # unsup: 0399 0314 0300 +1F3C > C9 # unsup: 0399 0313 0301 +1F3D > C9 # unsup: 0399 0314 0301 +1F3E > C9 # unsup: 0399 0313 0342 +1F3F > C9 # unsup: 0399 0314 0342 +1F40 > EF # unsup: 03BF 0313 +1F41 > EF # unsup: 03BF 0314 +1F42 > EF # unsup: 03BF 0313 0300 +1F43 > EF # unsup: 03BF 0314 0300 +1F44 > EF # unsup: 03BF 0313 0301 +1F45 > EF # unsup: 03BF 0314 0301 +1F48 > CF # unsup: 039F 0313 +1F49 > CF # unsup: 039F 0314 +1F4A > CF # unsup: 039F 0313 0300 +1F4B > CF # unsup: 039F 0314 0300 +1F4C > CF # unsup: 039F 0313 0301 +1F4D > CF # unsup: 039F 0314 0301 +1F50 > F5 # unsup: 03C5 0313 +1F51 > F5 # unsup: 03C5 0314 +1F52 > F5 # unsup: 03C5 0313 0300 +1F53 > F5 # unsup: 03C5 0314 0300 +1F54 > F5 # unsup: 03C5 0313 0301 +1F55 > F5 # unsup: 03C5 0314 0301 +1F56 > F5 # unsup: 03C5 0313 0342 +1F57 > F5 # unsup: 03C5 0314 0342 +1F59 > D5 # unsup: 03A5 0314 +1F5B > D5 # unsup: 03A5 0314 0300 +1F5D > D5 # unsup: 03A5 0314 0301 +1F5F > D5 # unsup: 03A5 0314 0342 +1F60 > F9 # unsup: 03C9 0313 +1F61 > F9 # unsup: 03C9 0314 +1F62 > F9 # unsup: 03C9 0313 0300 +1F63 > F9 # unsup: 03C9 0314 0300 +1F64 > F9 # unsup: 03C9 0313 0301 +1F65 > F9 # unsup: 03C9 0314 0301 +1F66 > F9 # unsup: 03C9 0313 0342 +1F67 > F9 # unsup: 03C9 0314 0342 +1F68 > D9 # unsup: 03A9 0313 +1F69 > D9 # unsup: 03A9 0314 +1F6A > D9 # unsup: 03A9 0313 0300 +1F6B > D9 # unsup: 03A9 0314 0300 +1F6C > D9 # unsup: 03A9 0313 0301 +1F6D > D9 # unsup: 03A9 0314 0301 +1F6E > D9 # unsup: 03A9 0313 0342 +1F6F > D9 # unsup: 03A9 0314 0342 +1F70 > E1 # unsup: 03B1 0300 +1F71 > DC +1F72 > E5 # unsup: 03B5 0300 +1F73 > DD +1F74 > E7 # unsup: 03B7 0300 +1F75 > DE +1F76 > E9 # unsup: 03B9 0300 +1F77 > DF +1F78 > EF # unsup: 03BF 0300 +1F79 > FC +1F7A > F5 # unsup: 03C5 0300 +1F7B > FD +1F7C > F9 # unsup: 03C9 0300 +1F7D > FE +1F80 > E1 # unsup: 03B1 0313 0345 +1F81 > E1 # unsup: 03B1 0314 0345 +1F82 > E1 # unsup: 03B1 0313 0300 0345 +1F83 > E1 # unsup: 03B1 0314 0300 0345 +1F84 > E1 # unsup: 03B1 0313 0301 0345 +1F85 > E1 # unsup: 03B1 0314 0301 0345 +1F86 > E1 # unsup: 03B1 0313 0342 0345 +1F87 > E1 # unsup: 03B1 0314 0342 0345 +1F88 > C1 # unsup: 0391 0313 0345 +1F89 > C1 # unsup: 0391 0314 0345 +1F8A > C1 # unsup: 0391 0313 0300 0345 +1F8B > C1 # unsup: 0391 0314 0300 0345 +1F8C > C1 # unsup: 0391 0313 0301 0345 +1F8D > C1 # unsup: 0391 0314 0301 0345 +1F8E > C1 # unsup: 0391 0313 0342 0345 +1F8F > C1 # unsup: 0391 0314 0342 0345 +1F90 > E7 # unsup: 03B7 0313 0345 +1F91 > E7 # unsup: 03B7 0314 0345 +1F92 > E7 # unsup: 03B7 0313 0300 0345 +1F93 > E7 # unsup: 03B7 0314 0300 0345 +1F94 > E7 # unsup: 03B7 0313 0301 0345 +1F95 > E7 # unsup: 03B7 0314 0301 0345 +1F96 > E7 # unsup: 03B7 0313 0342 0345 +1F97 > E7 # unsup: 03B7 0314 0342 0345 +1F98 > C7 # unsup: 0397 0313 0345 +1F99 > C7 # unsup: 0397 0314 0345 +1F9A > C7 # unsup: 0397 0313 0300 0345 +1F9B > C7 # unsup: 0397 0314 0300 0345 +1F9C > C7 # unsup: 0397 0313 0301 0345 +1F9D > C7 # unsup: 0397 0314 0301 0345 +1F9E > C7 # unsup: 0397 0313 0342 0345 +1F9F > C7 # unsup: 0397 0314 0342 0345 +1FA0 > F9 # unsup: 03C9 0313 0345 +1FA1 > F9 # unsup: 03C9 0314 0345 +1FA2 > F9 # unsup: 03C9 0313 0300 0345 +1FA3 > F9 # unsup: 03C9 0314 0300 0345 +1FA4 > F9 # unsup: 03C9 0313 0301 0345 +1FA5 > F9 # unsup: 03C9 0314 0301 0345 +1FA6 > F9 # unsup: 03C9 0313 0342 0345 +1FA7 > F9 # unsup: 03C9 0314 0342 0345 +1FA8 > D9 # unsup: 03A9 0313 0345 +1FA9 > D9 # unsup: 03A9 0314 0345 +1FAA > D9 # unsup: 03A9 0313 0300 0345 +1FAB > D9 # unsup: 03A9 0314 0300 0345 +1FAC > D9 # unsup: 03A9 0313 0301 0345 +1FAD > D9 # unsup: 03A9 0314 0301 0345 +1FAE > D9 # unsup: 03A9 0313 0342 0345 +1FAF > D9 # unsup: 03A9 0314 0342 0345 +1FB0 > E1 # unsup: 03B1 0306 +1FB1 > E1 # unsup: 03B1 0304 +1FB2 > E1 # unsup: 03B1 0300 0345 +1FB3 > E1 # unsup: 03B1 0345 +1FB4 > DC # unsup: 03AC 0345 +1FB6 > E1 # unsup: 03B1 0342 +1FB7 > E1 # unsup: 03B1 0342 0345 +1FB8 > C1 # unsup: 0391 0306 +1FB9 > C1 # unsup: 0391 0304 +1FBA > C1 # unsup: 0391 0300 +1FBB > A2 +1FBC > C1 # unsup: 0391 0345 +1FBE > E9 +1FC1 > A8 # unsup: 00A8 0342 +1FC2 > E7 # unsup: 03B7 0300 0345 +1FC3 > E7 # unsup: 03B7 0345 +1FC4 > DE # unsup: 03AE 0345 +1FC6 > E7 # unsup: 03B7 0342 +1FC7 > E7 # unsup: 03B7 0342 0345 +1FC8 > C5 # unsup: 0395 0300 +1FC9 > B8 +1FCA > C7 # unsup: 0397 0300 +1FCB > B9 +1FCC > C7 # unsup: 0397 0345 +1FD0 > E9 # unsup: 03B9 0306 +1FD1 > E9 # unsup: 03B9 0304 +1FD2 > FA # unsup: 03CA 0300 +1FD3 > C0 +1FD6 > E9 # unsup: 03B9 0342 +1FD7 > FA # unsup: 03CA 0342 +1FD8 > C9 # unsup: 0399 0306 +1FD9 > C9 # unsup: 0399 0304 +1FDA > C9 # unsup: 0399 0300 +1FDB > BA +1FE0 > F5 # unsup: 03C5 0306 +1FE1 > F5 # unsup: 03C5 0304 +1FE2 > FB # unsup: 03CB 0300 +1FE3 > E0 +1FE4 > F1 # unsup: 03C1 0313 +1FE5 > F1 # unsup: 03C1 0314 +1FE6 > F5 # unsup: 03C5 0342 +1FE7 > FB # unsup: 03CB 0342 +1FE8 > D5 # unsup: 03A5 0306 +1FE9 > D5 # unsup: 03A5 0304 +1FEA > D5 # unsup: 03A5 0300 +1FEB > BE +1FEC > D1 # unsup: 03A1 0314 +1FED > A8 # unsup: 00A8 0300 +1FEE > A1 +1FEF > 60 +1FF2 > F9 # unsup: 03C9 0300 0345 +1FF3 > F9 # unsup: 03C9 0345 +1FF4 > FE # unsup: 03CE 0345 +1FF6 > F9 # unsup: 03C9 0342 +1FF7 > F9 # unsup: 03C9 0342 0345 +1FF8 > CF # unsup: 039F 0300 +1FF9 > BC +1FFA > D9 # unsup: 03A9 0300 +1FFB > BF +1FFC > D9 # unsup: 03A9 0345 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2013 > 96 +2014 > 97 +2015 > AF +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > 80 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 274 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +0088 > 88 +008A > 8A +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0098 > 98 +009A > 9A +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 / + N 1 + 0301 > A1 + . +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00BB > BB +00BD > BD +0192 > 83 +037E > 3B +0384 > B4 +0385 > A1 +0386 > A2 +0387 > B7 +0388 > B8 +0389 > B9 +038A > BA +038C > BC +038E > BE +038F > BF +0390 > C0 +0391 > C1 / + N 1 + 0301 > A2 + . +0392 > C2 +0393 > C3 +0394 > C4 +0395 > C5 / + N 1 + 0301 > B8 + . +0396 > C6 +0397 > C7 / + N 1 + 0301 > B9 + . +0398 > C8 +0399 > C9 / + N 2 + 0301 > BA + 0308 > DA + . +039A > CA +039B > CB +039C > CC +039D > CD +039E > CE +039F > CF / + N 1 + 0301 > BC + . +03A0 > D0 +03A1 > D1 +03A3 > D3 +03A4 > D4 +03A5 > D5 / + N 2 + 0301 > BE + 0308 > DB + . +03A6 > D6 +03A7 > D7 +03A8 > D8 +03A9 > D9 / + N 1 + 0301 > BF + . +03AA > DA +03AB > DB +03AC > DC +03AD > DD +03AE > DE +03AF > DF +03B0 > E0 +03B1 > E1 / + N 1 + 0301 > DC + . +03B2 > E2 +03B3 > E3 +03B4 > E4 +03B5 > E5 / + N 1 + 0301 > DD + . +03B6 > E6 +03B7 > E7 / + N 1 + 0301 > DE + . +03B8 > E8 +03B9 > E9 / + N 2 + 0301 > DF + 0308 > FA / + N 1 + 0301 > C0 + . + . +03BA > EA +03BB > EB +03BC > EC +03BD > ED +03BE > EE +03BF > EF / + N 1 + 0301 > FC + . +03C0 > F0 +03C1 > F1 +03C2 > F2 +03C3 > F3 +03C4 > F4 +03C5 > F5 / + N 2 + 0301 > FD + 0308 > FB / + N 1 + 0301 > E0 + . + . +03C6 > F6 +03C7 > F7 +03C8 > F8 +03C9 > F9 / + N 1 + 0301 > FE + . +03CA > FA / + N 1 + 0301 > C0 + . +03CB > FB / + N 1 + 0301 > E0 + . +03CC > FC +03CD > FD +03CE > FE +1F71 > DC +1F73 > DD +1F75 > DE +1F77 > DF +1F79 > FC +1F7B > FD +1F7D > FE +1FBB > A2 +1FBE > E9 +1FC9 > B8 +1FCB > B9 +1FD3 > C0 +1FDB > BA +1FE3 > E0 +1FEB > BE +1FEE > A1 +1FEF > 60 +1FF9 > BC +1FFB > BF +2013 > 96 +2014 > 97 +2015 > AF +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AC > 80 +2122 > 99 +. + +NFD +/ +N 253 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 0088 +89 > 2030 +8A > 008A +8B > 2039 +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 0098 +99 > 2122 +9A > 009A +9B > 203A +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A8 0301 +A2 > 0391 0301 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 2015 +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 0384 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 0395 0301 +B9 > 0397 0301 +BA > 0399 0301 +BB > 00BB +BC > 039F 0301 +BD > 00BD +BE > 03A5 0301 +BF > 03A9 0301 +C0 > 03B9 0308 0301 +C1 > 0391 +C2 > 0392 +C3 > 0393 +C4 > 0394 +C5 > 0395 +C6 > 0396 +C7 > 0397 +C8 > 0398 +C9 > 0399 +CA > 039A +CB > 039B +CC > 039C +CD > 039D +CE > 039E +CF > 039F +D0 > 03A0 +D1 > 03A1 +D3 > 03A3 +D4 > 03A4 +D5 > 03A5 +D6 > 03A6 +D7 > 03A7 +D8 > 03A8 +D9 > 03A9 +DA > 0399 0308 +DB > 03A5 0308 +DC > 03B1 0301 +DD > 03B5 0301 +DE > 03B7 0301 +DF > 03B9 0301 +E0 > 03C5 0308 0301 +E1 > 03B1 +E2 > 03B2 +E3 > 03B3 +E4 > 03B4 +E5 > 03B5 +E6 > 03B6 +E7 > 03B7 +E8 > 03B8 +E9 > 03B9 +EA > 03BA +EB > 03BB +EC > 03BC +ED > 03BD +EE > 03BE +EF > 03BF +F0 > 03C0 +F1 > 03C1 +F2 > 03C2 +F3 > 03C3 +F4 > 03C4 +F5 > 03C5 +F6 > 03C6 +F7 > 03C7 +F8 > 03C8 +F9 > 03C9 +FA > 03B9 0308 +FB > 03C5 0308 +FC > 03BF 0301 +FD > 03C5 0301 +FE > 03C9 0301 +. + +NFC +/ +N 253 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 0088 +89 > 2030 +8A > 008A +8B > 2039 +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 0098 +99 > 2122 +9A > 009A +9B > 203A +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0385 +A2 > 0386 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 2015 +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 0384 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 0388 +B9 > 0389 +BA > 038A +BB > 00BB +BC > 038C +BD > 00BD +BE > 038E +BF > 038F +C0 > 0390 +C1 > 0391 +C2 > 0392 +C3 > 0393 +C4 > 0394 +C5 > 0395 +C6 > 0396 +C7 > 0397 +C8 > 0398 +C9 > 0399 +CA > 039A +CB > 039B +CC > 039C +CD > 039D +CE > 039E +CF > 039F +D0 > 03A0 +D1 > 03A1 +D3 > 03A3 +D4 > 03A4 +D5 > 03A5 +D6 > 03A6 +D7 > 03A7 +D8 > 03A8 +D9 > 03A9 +DA > 03AA +DB > 03AB +DC > 03AC +DD > 03AD +DE > 03AE +DF > 03AF +E0 > 03B0 +E1 > 03B1 +E2 > 03B2 +E3 > 03B3 +E4 > 03B4 +E5 > 03B5 +E6 > 03B6 +E7 > 03B7 +E8 > 03B8 +E9 > 03B9 +EA > 03BA +EB > 03BB +EC > 03BC +ED > 03BD +EE > 03BE +EF > 03BF +F0 > 03C0 +F1 > 03C1 +F2 > 03C2 +F3 > 03C3 +F4 > 03C4 +F5 > 03C5 +F6 > 03C6 +F7 > 03C7 +F8 > 03C8 +F9 > 03C9 +FA > 03CA +FB > 03CB +FC > 03CC +FD > 03CD +FE > 03CE +. + +COMP += NFC +. diff --git a/assets/data/cp1253.cset b/assets/data/cp1253.cset new file mode 100644 index 0000000..9d8d3cd --- /dev/null +++ b/assets/data/cp1253.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1253 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 20AC - Y 80 80 80 00 00 00 # EURO SIGN +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 0385 - Y A1 A1 A1 00 00 00 # GREEK DIALYTIKA TONOS +A2 0386 L Y A2 DC A2 C1 2A 00 # GREEK CAPITAL LETTER ALPHA WITH TONOS +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA E0AA . N AA AA AA 00 00 00 # <unused> +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 2015 - Y AF AF AF 00 00 00 # HORIZONTAL BAR +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 0384 - Y B4 B4 B4 00 00 00 # GREEK TONOS +B5 00B5 A Y CC B5 CC 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 0388 L Y B8 DD B8 C5 2A 00 # GREEK CAPITAL LETTER EPSILON WITH TONOS +B9 0389 L Y B9 DE B9 C7 2A 00 # GREEK CAPITAL LETTER ETA WITH TONOS +BA 038A L Y BA DF BA C9 2A 00 # GREEK CAPITAL LETTER IOTA WITH TONOS +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 038C L Y BC FC BC CF 2A 00 # GREEK CAPITAL LETTER OMICRON WITH TONOS +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 038E L Y BE FD BE D5 2A 00 # GREEK CAPITAL LETTER UPSILON WITH TONOS +BF 038F L Y BF FE BF D9 2A 00 # GREEK CAPITAL LETTER OMEGA WITH TONOS +C0 0390 L Y C0 C0 C0 E9 2A 00 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +C1 0391 L Y C1 E1 C1 C1 2A 00 # GREEK CAPITAL LETTER ALPHA +C2 0392 L Y C2 E2 C2 C2 E2 E2 # GREEK CAPITAL LETTER BETA +C3 0393 L Y C3 E3 C3 C3 E3 E3 # GREEK CAPITAL LETTER GAMMA +C4 0394 L Y C4 E4 C4 C4 E4 E4 # GREEK CAPITAL LETTER DELTA +C5 0395 L Y C5 E5 C5 C5 2A 00 # GREEK CAPITAL LETTER EPSILON +C6 0396 L Y C6 E6 C6 C6 E6 E6 # GREEK CAPITAL LETTER ZETA +C7 0397 L Y C7 E7 C7 C7 2A 00 # GREEK CAPITAL LETTER ETA +C8 0398 L Y C8 E8 C8 C8 E8 E8 # GREEK CAPITAL LETTER THETA +C9 0399 L Y C9 E9 C9 C9 2A 00 # GREEK CAPITAL LETTER IOTA +CA 039A L Y CA EA CA CA EA EA # GREEK CAPITAL LETTER KAPPA +CB 039B L Y CB EB CB CB EB EB # GREEK CAPITAL LETTER LAMDA +CC 039C L Y CC EC CC CC EC EC # GREEK CAPITAL LETTER MU +CD 039D L Y CD ED CD CD ED ED # GREEK CAPITAL LETTER NU +CE 039E L Y CE EE CE CE EE EE # GREEK CAPITAL LETTER XI +CF 039F L Y CF EF CF CF 2A 00 # GREEK CAPITAL LETTER OMICRON +D0 03A0 L Y D0 F0 D0 D0 F0 F0 # GREEK CAPITAL LETTER PI +D1 03A1 L Y D1 F1 D1 D1 F1 F1 # GREEK CAPITAL LETTER RHO +D2 E0D2 . N D2 D2 D2 00 00 00 # <unused> +D3 03A3 L Y D3 F3 D3 D3 F3 F3 # GREEK CAPITAL LETTER SIGMA +D4 03A4 L Y D4 F4 D4 D4 F4 F4 # GREEK CAPITAL LETTER TAU +D5 03A5 L Y D5 F5 D5 D5 2A 00 # GREEK CAPITAL LETTER UPSILON +D6 03A6 L Y D6 F6 D6 D6 F6 F6 # GREEK CAPITAL LETTER PHI +D7 03A7 L Y D7 F7 D7 D7 F7 F7 # GREEK CAPITAL LETTER CHI +D8 03A8 L Y D8 F8 D8 D8 F8 F8 # GREEK CAPITAL LETTER PSI +D9 03A9 L Y D9 F9 D9 D9 2A 00 # GREEK CAPITAL LETTER OMEGA +DA 03AA L Y DA FA DA C9 2A 00 # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +DB 03AB L Y DB FB DB D5 2A 00 # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +DC 03AC L Y A2 DC A2 E1 2A 00 # GREEK SMALL LETTER ALPHA WITH TONOS +DD 03AD L Y B8 DD B8 E5 2A 00 # GREEK SMALL LETTER EPSILON WITH TONOS +DE 03AE L Y B9 DE B9 E7 2A 00 # GREEK SMALL LETTER ETA WITH TONOS +DF 03AF L Y BA DF BA E9 2A 00 # GREEK SMALL LETTER IOTA WITH TONOS +E0 03B0 L Y E0 E0 E0 F5 2A 00 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +E1 03B1 L Y C1 E1 C1 E1 2A 00 # GREEK SMALL LETTER ALPHA +E2 03B2 L Y C2 E2 C2 E2 E2 E2 # GREEK SMALL LETTER BETA +E3 03B3 L Y C3 E3 C3 E3 E3 E3 # GREEK SMALL LETTER GAMMA +E4 03B4 L Y C4 E4 C4 E4 E4 E4 # GREEK SMALL LETTER DELTA +E5 03B5 L Y C5 E5 C5 E5 2A 00 # GREEK SMALL LETTER EPSILON +E6 03B6 L Y C6 E6 C6 E6 E6 E6 # GREEK SMALL LETTER ZETA +E7 03B7 L Y C7 E7 C7 E7 2A 00 # GREEK SMALL LETTER ETA +E8 03B8 L Y C8 E8 C8 E8 E8 E8 # GREEK SMALL LETTER THETA +E9 03B9 L Y C9 E9 C9 E9 2A 00 # GREEK SMALL LETTER IOTA +EA 03BA L Y CA EA CA EA EA EA # GREEK SMALL LETTER KAPPA +EB 03BB L Y CB EB CB EB EB EB # GREEK SMALL LETTER LAMDA +EC 03BC L Y CC EC CC EC EC EC # GREEK SMALL LETTER MU +ED 03BD L Y CD ED CD ED ED ED # GREEK SMALL LETTER NU +EE 03BE L Y CE EE CE EE EE EE # GREEK SMALL LETTER XI +EF 03BF L Y CF EF CF EF 2A 00 # GREEK SMALL LETTER OMICRON +F0 03C0 L Y D0 F0 D0 F0 F0 F0 # GREEK SMALL LETTER PI +F1 03C1 L Y D1 F1 D1 F1 F1 F1 # GREEK SMALL LETTER RHO +F2 03C2 L Y D3 F2 D3 F2 F2 F2 # GREEK SMALL LETTER FINAL SIGMA +F3 03C3 L Y D3 F3 D3 F3 F3 F3 # GREEK SMALL LETTER SIGMA +F4 03C4 L Y D4 F4 D4 F4 F4 F4 # GREEK SMALL LETTER TAU +F5 03C5 L Y D5 F5 D5 F5 2A 00 # GREEK SMALL LETTER UPSILON +F6 03C6 L Y D6 F6 D6 F6 F6 F6 # GREEK SMALL LETTER PHI +F7 03C7 L Y D7 F7 D7 F7 F7 F7 # GREEK SMALL LETTER CHI +F8 03C8 L Y D8 F8 D8 F8 F8 F8 # GREEK SMALL LETTER PSI +F9 03C9 L Y D9 F9 D9 F9 2A 00 # GREEK SMALL LETTER OMEGA +FA 03CA L Y DA FA DA E9 2A 00 # GREEK SMALL LETTER IOTA WITH DIALYTIKA +FB 03CB L Y DB FB DB F5 2A 00 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA +FC 03CC L Y BC FC BC EF 2A 00 # GREEK SMALL LETTER OMICRON WITH TONOS +FD 03CD L Y BE FD BE F5 2A 00 # GREEK SMALL LETTER UPSILON WITH TONOS +FE 03CE L Y BF FE BF F9 2A 00 # GREEK SMALL LETTER OMEGA WITH TONOS +FF E0FF . N FF FF FF 00 00 00 # <unused> diff --git a/assets/data/cp1254.cmap b/assets/data/cp1254.cmap new file mode 100644 index 0000000..4f2821d --- /dev/null +++ b/assets/data/cp1254.cmap @@ -0,0 +1,1944 @@ +INTERNAL +/ +N 951 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 / + N 1 + 0306 > D0 + . +0048 > 48 +0049 > 49 / + N 5 + 0300 > CC + 0301 > CD + 0302 > CE + 0307 > DD + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 2 + 030C > 8A + 0327 > DE + . +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0308 > 9F + . +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 / + N 1 + 0306 > F0 + . +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 2 + 030C > 9A + 0327 > FE + . +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +009D > 9D +009E > 9E +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > 59 # unsup: 0059 0301 +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > 79 # unsup: 0079 0301 +00FF > FF +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > D0 +011F > F0 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > DD +0131 > FD +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 8C +0153 > 9C +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > DE +015F > FE +0160 > 8A +0161 > 9A +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 9F +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +0192 > 83 +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +01FE > D8 # unsup: 00D8 0301 +01FF > F8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C6 > 88 +02DC > 98 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 8A # unsup: 0160 0307 +1E67 > 9A # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > CA # unsup: 00CA 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > CA # unsup: 00CA 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > CA # unsup: 00CA 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > CA # unsup: 00CA 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > 80 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 260 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 / + N 1 + 0306 > D0 + . +0048 > 48 +0049 > 49 / + N 5 + 0300 > CC + 0301 > CD + 0302 > CE + 0307 > DD + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 2 + 030C > 8A + 0327 > DE + . +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0308 > 9F + . +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 / + N 1 + 0306 > F0 + . +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 2 + 030C > 9A + 0327 > FE + . +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +009D > 9D +009E > 9E +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FF > FF +011E > D0 +011F > F0 +0130 > DD +0131 > FD +0152 > 8C +0153 > 9C +015E > DE +015F > FE +0160 > 8A +0161 > 9A +0178 > 9F +0192 > 83 +02C6 > 88 +02DC > 98 +037E > 3B +0387 > B7 +1FEF > 60 +1FFD > B4 +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AC > 80 +2122 > 99 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 0053 030C +8B > 2039 +8C > 0152 +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 0073 030C +9B > 203A +9C > 0153 +9D > 009D +9E > 009E +9F > 0059 0308 +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0303 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0049 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 0047 0306 +D1 > 004E 0303 +D2 > 004F 0300 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 00D7 +D8 > 00D8 +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0049 0307 +DE > 0053 0327 +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0303 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0069 0300 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 0067 0306 +F1 > 006E 0303 +F2 > 006F 0300 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 00F7 +F8 > 00F8 +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0131 +FE > 0073 0327 +FF > 0079 0308 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 0160 +8B > 2039 +8C > 0152 +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 0161 +9B > 203A +9C > 0153 +9D > 009D +9E > 009E +9F > 0178 +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 +C3 > 00C3 +C4 > 00C4 +C5 > 00C5 +C6 > 00C6 +C7 > 00C7 +C8 > 00C8 +C9 > 00C9 +CA > 00CA +CB > 00CB +CC > 00CC +CD > 00CD +CE > 00CE +CF > 00CF +D0 > 011E +D1 > 00D1 +D2 > 00D2 +D3 > 00D3 +D4 > 00D4 +D5 > 00D5 +D6 > 00D6 +D7 > 00D7 +D8 > 00D8 +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 0130 +DE > 015E +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 +E3 > 00E3 +E4 > 00E4 +E5 > 00E5 +E6 > 00E6 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 00EC +ED > 00ED +EE > 00EE +EF > 00EF +F0 > 011F +F1 > 00F1 +F2 > 00F2 +F3 > 00F3 +F4 > 00F4 +F5 > 00F5 +F6 > 00F6 +F7 > 00F7 +F8 > 00F8 +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 0131 +FE > 015F +FF > 00FF +. + +COMP += NFC +. diff --git a/assets/data/cp1254.cset b/assets/data/cp1254.cset new file mode 100644 index 0000000..c30b93b --- /dev/null +++ b/assets/data/cp1254.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1254 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 20AC - Y 80 80 80 00 00 00 # EURO SIGN +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 0160 L Y 8A 9A 8A 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 0152 L Y 8C 9C 8C 8C 2A 00 # LATIN CAPITAL LIGATURE OE +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 02DC - Y 98 98 98 00 00 00 # SMALL TILDE +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 0161 L Y 8A 9A 8A 73 73 73 # LATIN SMALL LETTER S WITH CARON +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 0153 L Y 8C 9C 8C 9C 2A 00 # LATIN SMALL LIGATURE OE +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 0178 L Y 9F FF 9F 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 011E L Y D0 F0 D0 47 67 67 # LATIN CAPITAL LETTER G WITH BREVE +D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE +D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 0130 L Y DD 69 DD 49 2A 00 # LATIN CAPITAL LETTER I WITH DOT ABOVE +DE 015E L Y DE FE DE 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 011F L Y D0 F0 D0 67 67 67 # LATIN SMALL LETTER G WITH BREVE +F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE +F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 0131 L Y 49 FD 49 FD FD FD # LATIN SMALL LETTER DOTLESS I +FE 015F L Y DE FE DE 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA +FF 00FF L Y 9F FF 9F 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/assets/data/cp1255.cmap b/assets/data/cp1255.cmap new file mode 100644 index 0000000..189588d --- /dev/null +++ b/assets/data/cp1255.cmap @@ -0,0 +1,2251 @@ +INTERNAL +/ +N 1045 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +008A > 8A +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +009A > 9A +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D7 > AA +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F7 > BA +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +0192 > 83 +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C6 > 88 +02DC > 98 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +05B0 > C0 +05B1 > C1 +05B2 > C2 +05B3 > C3 +05B4 > C4 +05B5 > C5 +05B6 > C6 +05B7 > C7 +05B8 > C8 +05B9 > C9 +05BB > CB +05BC > CC +05BD > CD +05BE > CE +05BF > CF +05C0 > D0 +05C1 > D1 +05C2 > D2 +05C3 > D3 +05D0 > E0 +05D1 > E1 +05D2 > E2 +05D3 > E3 +05D4 > E4 +05D5 > E5 +05D6 > E6 +05D7 > E7 +05D8 > E8 +05D9 > E9 +05DA > EA +05DB > EB +05DC > EC +05DD > ED +05DE > EE +05DF > EF +05E0 > F0 +05E1 > F1 +05E2 > F2 +05E3 > F3 +05E4 > F4 +05E5 > F5 +05E6 > F6 +05E7 > F7 +05E8 > F8 +05E9 > F9 +05EA > FA +05F0 > D4 +05F1 > D5 +05F2 > D6 +05F3 > D7 +05F4 > D8 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +200E > FD +200F > FE +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AA > A4 +20AC > 80 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB1D > E9 C4 +FB1F > D6 C7 +FB20 > F2 # compat +FB21 > E0 # compat +FB22 > E3 # compat +FB23 > E4 # compat +FB24 > EB # compat +FB25 > EC # compat +FB26 > ED # compat +FB27 > F8 # compat +FB28 > FA # compat +FB29 > 2B # compat +FB2A > F9 D1 +FB2B > F9 D2 +FB2C > F9 CC D1 +FB2D > F9 CC D2 +FB2E > E0 C7 +FB2F > E0 C8 +FB30 > E0 CC +FB31 > E1 CC +FB32 > E2 CC +FB33 > E3 CC +FB34 > E4 CC +FB35 > E5 CC +FB36 > E6 CC +FB38 > E8 CC +FB39 > E9 CC +FB3A > EA CC +FB3B > EB CC +FB3C > EC CC +FB3E > EE CC +FB40 > F0 CC +FB41 > F1 CC +FB43 > F3 CC +FB44 > F4 CC +FB46 > F6 CC +FB47 > F7 CC +FB48 > F8 CC +FB49 > F9 CC +FB4A > FA CC +FB4B > E5 C9 +FB4C > E1 CF +FB4D > EB CF +FB4E > F4 CF +FB4F > E0 EC # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 283 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +008A > 8A +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +009A > 9A +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00D7 > AA +00F7 > BA +0192 > 83 +02C6 > 88 +02DC > 98 +037E > 3B +0387 > B7 +05B0 > C0 +05B1 > C1 +05B2 > C2 +05B3 > C3 +05B4 > C4 +05B5 > C5 +05B6 > C6 +05B7 > C7 +05B8 > C8 +05B9 > C9 +05BB > CB +05BC > CC +05BD > CD +05BE > CE +05BF > CF +05C0 > D0 +05C1 > D1 +05C2 > D2 +05C3 > D3 +05D0 > E0 +05D1 > E1 +05D2 > E2 +05D3 > E3 +05D4 > E4 +05D5 > E5 +05D6 > E6 +05D7 > E7 +05D8 > E8 +05D9 > E9 +05DA > EA +05DB > EB +05DC > EC +05DD > ED +05DE > EE +05DF > EF +05E0 > F0 +05E1 > F1 +05E2 > F2 +05E3 > F3 +05E4 > F4 +05E5 > F5 +05E6 > F6 +05E7 > F7 +05E8 > F8 +05E9 > F9 +05EA > FA +05F0 > D4 +05F1 > D5 +05F2 > D6 +05F3 > D7 +05F4 > D8 +1FEF > 60 +1FFD > B4 +200E > FD +200F > FE +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AA > A4 +20AC > 80 +2122 > 99 +FB1D > E9 C4 +FB1F > D6 C7 +FB2A > F9 D1 +FB2B > F9 D2 +FB2C > F9 CC D1 +FB2D > F9 CC D2 +FB2E > E0 C7 +FB2F > E0 C8 +FB30 > E0 CC +FB31 > E1 CC +FB32 > E2 CC +FB33 > E3 CC +FB34 > E4 CC +FB35 > E5 CC +FB36 > E6 CC +FB38 > E8 CC +FB39 > E9 CC +FB3A > EA CC +FB3B > EB CC +FB3C > EC CC +FB3E > EE CC +FB40 > F0 CC +FB41 > F1 CC +FB43 > F3 CC +FB44 > F4 CC +FB46 > F6 CC +FB47 > F7 CC +FB48 > F8 CC +FB49 > F9 CC +FB4A > FA CC +FB4B > E5 C9 +FB4C > E1 CF +FB4D > EB CF +FB4E > F4 CF +. + +NFD +/ +N 245 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 008A +8B > 2039 +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 009A +9B > 203A +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 20AA +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00D7 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00F7 +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 05B0 +C1 > 05B1 +C2 > 05B2 +C3 > 05B3 +C4 > 05B4 +C5 > 05B5 +C6 > 05B6 +C7 > 05B7 +C8 > 05B8 +C9 > 05B9 +CB > 05BB +CC > 05BC +CD > 05BD +CE > 05BE +CF > 05BF +D0 > 05C0 +D1 > 05C1 +D2 > 05C2 +D3 > 05C3 +D4 > 05F0 +D5 > 05F1 +D6 > 05F2 +D7 > 05F3 +D8 > 05F4 +E0 > 05D0 +E1 > 05D1 +E2 > 05D2 +E3 > 05D3 +E4 > 05D4 +E5 > 05D5 +E6 > 05D6 +E7 > 05D7 +E8 > 05D8 +E9 > 05D9 +EA > 05DA +EB > 05DB +EC > 05DC +ED > 05DD +EE > 05DE +EF > 05DF +F0 > 05E0 +F1 > 05E1 +F2 > 05E2 +F3 > 05E3 +F4 > 05E4 +F5 > 05E5 +F6 > 05E6 +F7 > 05E7 +F8 > 05E8 +F9 > 05E9 +FA > 05EA +FD > 200E +FE > 200F +. + +NFC +/ +N 245 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 008A +8B > 2039 +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 009A +9B > 203A +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 20AA +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00D7 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00F7 +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 05B0 +C1 > 05B1 +C2 > 05B2 +C3 > 05B3 +C4 > 05B4 +C5 > 05B5 +C6 > 05B6 +C7 > 05B7 +C8 > 05B8 +C9 > 05B9 +CB > 05BB +CC > 05BC +CD > 05BD +CE > 05BE +CF > 05BF +D0 > 05C0 +D1 > 05C1 +D2 > 05C2 +D3 > 05C3 +D4 > 05F0 +D5 > 05F1 +D6 > 05F2 / + N 1 + C7 > 05F2 05B7 + . +D7 > 05F3 +D8 > 05F4 +E0 > 05D0 / + N 3 + C7 > 05D0 05B7 + C8 > 05D0 05B8 + CC > 05D0 05BC + . +E1 > 05D1 / + N 2 + CC > 05D1 05BC + CF > 05D1 05BF + . +E2 > 05D2 / + N 1 + CC > 05D2 05BC + . +E3 > 05D3 / + N 1 + CC > 05D3 05BC + . +E4 > 05D4 / + N 1 + CC > 05D4 05BC + . +E5 > 05D5 / + N 2 + C9 > 05D5 05B9 + CC > 05D5 05BC + . +E6 > 05D6 / + N 1 + CC > 05D6 05BC + . +E7 > 05D7 +E8 > 05D8 / + N 1 + CC > 05D8 05BC + . +E9 > 05D9 / + N 2 + C4 > 05D9 05B4 + CC > 05D9 05BC + . +EA > 05DA / + N 1 + CC > 05DA 05BC + . +EB > 05DB / + N 2 + CC > 05DB 05BC + CF > 05DB 05BF + . +EC > 05DC / + N 1 + CC > 05DC 05BC + . +ED > 05DD +EE > 05DE / + N 1 + CC > 05DE 05BC + . +EF > 05DF +F0 > 05E0 / + N 1 + CC > 05E0 05BC + . +F1 > 05E1 / + N 1 + CC > 05E1 05BC + . +F2 > 05E2 +F3 > 05E3 / + N 1 + CC > 05E3 05BC + . +F4 > 05E4 / + N 2 + CC > 05E4 05BC + CF > 05E4 05BF + . +F5 > 05E5 +F6 > 05E6 / + N 1 + CC > 05E6 05BC + . +F7 > 05E7 / + N 1 + CC > 05E7 05BC + . +F8 > 05E8 / + N 1 + CC > 05E8 05BC + . +F9 > 05E9 / + N 3 + CC > 05E9 05BC / + N 2 + D1 > 05E9 05BC 05C1 + D2 > 05E9 05BC 05C2 + . + D1 > 05E9 05C1 + D2 > 05E9 05C2 + . +FA > 05EA / + N 1 + CC > 05EA 05BC + . +FD > 200E +FE > 200F +. + +COMP +/ +N 245 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 008A +8B > 2039 +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 009A +9B > 203A +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 20AA +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00D7 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00F7 +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 05B0 +C1 > 05B1 +C2 > 05B2 +C3 > 05B3 +C4 > 05B4 +C5 > 05B5 +C6 > 05B6 +C7 > 05B7 +C8 > 05B8 +C9 > 05B9 +CB > 05BB +CC > 05BC +CD > 05BD +CE > 05BE +CF > 05BF +D0 > 05C0 +D1 > 05C1 +D2 > 05C2 +D3 > 05C3 +D4 > 05F0 +D5 > 05F1 +D6 > 05F2 / + N 1 + C7 > FB1F + . +D7 > 05F3 +D8 > 05F4 +E0 > 05D0 / + N 3 + C7 > FB2E + C8 > FB2F + CC > FB30 + . +E1 > 05D1 / + N 2 + CC > FB31 + CF > FB4C + . +E2 > 05D2 / + N 1 + CC > FB32 + . +E3 > 05D3 / + N 1 + CC > FB33 + . +E4 > 05D4 / + N 1 + CC > FB34 + . +E5 > 05D5 / + N 2 + C9 > FB4B + CC > FB35 + . +E6 > 05D6 / + N 1 + CC > FB36 + . +E7 > 05D7 +E8 > 05D8 / + N 1 + CC > FB38 + . +E9 > 05D9 / + N 2 + C4 > FB1D + CC > FB39 + . +EA > 05DA / + N 1 + CC > FB3A + . +EB > 05DB / + N 2 + CC > FB3B + CF > FB4D + . +EC > 05DC / + N 1 + CC > FB3C + . +ED > 05DD +EE > 05DE / + N 1 + CC > FB3E + . +EF > 05DF +F0 > 05E0 / + N 1 + CC > FB40 + . +F1 > 05E1 / + N 1 + CC > FB41 + . +F2 > 05E2 +F3 > 05E3 / + N 1 + CC > FB43 + . +F4 > 05E4 / + N 2 + CC > FB44 + CF > FB4E + . +F5 > 05E5 +F6 > 05E6 / + N 1 + CC > FB46 + . +F7 > 05E7 / + N 1 + CC > FB47 + . +F8 > 05E8 / + N 1 + CC > FB48 + . +F9 > 05E9 / + N 3 + CC > FB49 / + N 2 + D1 > FB2C + D2 > FB2D + . + D1 > FB2A + D2 > FB2B + . +FA > 05EA / + N 1 + CC > FB4A + . +FD > 200E +FE > 200F +. diff --git a/assets/data/cp1255.cset b/assets/data/cp1255.cset new file mode 100644 index 0000000..e1a8e96 --- /dev/null +++ b/assets/data/cp1255.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1255 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 20AC - Y 80 80 80 00 00 00 # EURO SIGN +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 02DC - Y 98 98 98 00 00 00 # SMALL TILDE +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 20AA - Y A4 A4 A4 00 00 00 # NEW SHEQEL SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 00D7 - Y AA AA AA 00 00 00 # MULTIPLICATION SIGN +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 00F7 - Y BA BA BA 00 00 00 # DIVISION SIGN +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK +C0 05B0 M M C0 C0 C0 00 00 00 # HEBREW POINT SHEVA +C1 05B1 M M C1 C1 C1 00 00 00 # HEBREW POINT HATAF SEGOL +C2 05B2 M M C2 C2 C2 00 00 00 # HEBREW POINT HATAF PATAH +C3 05B3 M M C3 C3 C3 00 00 00 # HEBREW POINT HATAF QAMATS +C4 05B4 M M C4 C4 C4 00 00 00 # HEBREW POINT HIRIQ +C5 05B5 M M C5 C5 C5 00 00 00 # HEBREW POINT TSERE +C6 05B6 M M C6 C6 C6 00 00 00 # HEBREW POINT SEGOL +C7 05B7 M M C7 C7 C7 00 00 00 # HEBREW POINT PATAH +C8 05B8 M M C8 C8 C8 00 00 00 # HEBREW POINT QAMATS +C9 05B9 M M C9 C9 C9 00 00 00 # HEBREW POINT HOLAM +CA E0CA . N CA CA CA 00 00 00 # <unused> +CB 05BB M M CB CB CB 00 00 00 # HEBREW POINT QUBUTS +CC 05BC M M CC CC CC 00 00 00 # HEBREW POINT DAGESH OR MAPIQ +CD 05BD M M CD CD CD 00 00 00 # HEBREW POINT METEG +CE 05BE - Y CE CE CE 00 00 00 # HEBREW PUNCTUATION MAQAF +CF 05BF M M CF CF CF 00 00 00 # HEBREW POINT RAFE +D0 05C0 - Y D0 D0 D0 00 00 00 # HEBREW PUNCTUATION PASEQ +D1 05C1 M M D1 D1 D1 00 00 00 # HEBREW POINT SHIN DOT +D2 05C2 M M D2 D2 D2 00 00 00 # HEBREW POINT SIN DOT +D3 05C3 - Y D3 D3 D3 00 00 00 # HEBREW PUNCTUATION SOF PASUQ +D4 05F0 L Y D4 D4 D4 D4 D4 D4 # HEBREW LIGATURE YIDDISH DOUBLE VAV +D5 05F1 L Y D5 D5 D5 D5 D5 D5 # HEBREW LIGATURE YIDDISH VAV YOD +D6 05F2 L Y D6 D6 D6 D6 D6 D6 # HEBREW LIGATURE YIDDISH DOUBLE YOD +D7 05F3 - Y D7 D7 D7 00 00 00 # HEBREW PUNCTUATION GERESH +D8 05F4 - Y D8 D8 D8 00 00 00 # HEBREW PUNCTUATION GERSHAYIM +D9 E0D9 . N D9 D9 D9 00 00 00 # <unused> +DA E0DA . N DA DA DA 00 00 00 # <unused> +DB E0DB . N DB DB DB 00 00 00 # <unused> +DC E0DC . N DC DC DC 00 00 00 # <unused> +DD E0DD . N DD DD DD 00 00 00 # <unused> +DE E0DE . N DE DE DE 00 00 00 # <unused> +DF E0DF . N DF DF DF 00 00 00 # <unused> +E0 05D0 L Y E0 E0 E0 E0 E0 E0 # HEBREW LETTER ALEF +E1 05D1 L Y E1 E1 E1 E1 E1 E1 # HEBREW LETTER BET +E2 05D2 L Y E2 E2 E2 E2 E2 E2 # HEBREW LETTER GIMEL +E3 05D3 L Y E3 E3 E3 E3 E3 E3 # HEBREW LETTER DALET +E4 05D4 L Y E4 E4 E4 E4 E4 E4 # HEBREW LETTER HE +E5 05D5 L Y E5 E5 E5 E5 E5 E5 # HEBREW LETTER VAV +E6 05D6 L Y E6 E6 E6 E6 E6 E6 # HEBREW LETTER ZAYIN +E7 05D7 L Y E7 E7 E7 E7 E7 E7 # HEBREW LETTER HET +E8 05D8 L Y E8 E8 E8 E8 E8 E8 # HEBREW LETTER TET +E9 05D9 L Y E9 E9 E9 E9 E9 E9 # HEBREW LETTER YOD +EA 05DA L Y EA EA EA EA EA EA # HEBREW LETTER FINAL KAF +EB 05DB L Y EB EB EB EB EB EB # HEBREW LETTER KAF +EC 05DC L Y EC EC EC EC EC EC # HEBREW LETTER LAMED +ED 05DD L Y ED ED ED ED ED ED # HEBREW LETTER FINAL MEM +EE 05DE L Y EE EE EE EE EE EE # HEBREW LETTER MEM +EF 05DF L Y EF EF EF EF EF EF # HEBREW LETTER FINAL NUN +F0 05E0 L Y F0 F0 F0 F0 F0 F0 # HEBREW LETTER NUN +F1 05E1 L Y F1 F1 F1 F1 F1 F1 # HEBREW LETTER SAMEKH +F2 05E2 L Y F2 F2 F2 F2 F2 F2 # HEBREW LETTER AYIN +F3 05E3 L Y F3 F3 F3 F3 F3 F3 # HEBREW LETTER FINAL PE +F4 05E4 L Y F4 F4 F4 F4 F4 F4 # HEBREW LETTER PE +F5 05E5 L Y F5 F5 F5 F5 F5 F5 # HEBREW LETTER FINAL TSADI +F6 05E6 L Y F6 F6 F6 F6 F6 F6 # HEBREW LETTER TSADI +F7 05E7 L Y F7 F7 F7 F7 F7 F7 # HEBREW LETTER QOF +F8 05E8 L Y F8 F8 F8 F8 F8 F8 # HEBREW LETTER RESH +F9 05E9 L Y F9 F9 F9 F9 F9 F9 # HEBREW LETTER SHIN +FA 05EA L Y FA FA FA FA FA FA # HEBREW LETTER TAV +FB E0FB . N FB FB FB 00 00 00 # <unused> +FC E0FC . N FC FC FC 00 00 00 # <unused> +FD 200E - N FD FD FD 00 00 00 # LEFT-TO-RIGHT MARK +FE 200F - N FE FE FE 00 00 00 # RIGHT-TO-LEFT MARK +FF E0FF . N FF FF FF 00 00 00 # <unused> diff --git a/assets/data/cp1256.cmap b/assets/data/cp1256.cmap new file mode 100644 index 0000000..951fabe --- /dev/null +++ b/assets/data/cp1256.cmap @@ -0,0 +1,2476 @@ +INTERNAL +/ +N 1609 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 2 + 0300 > E0 + 0302 > E2 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 2 + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F / + N 1 + 0302 > F4 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 / + N 3 + 0300 > F9 + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +00A0 > A0 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D7 > D7 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > E0 +00E1 > 61 # unsup: 0061 0301 +00E2 > E2 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > EE +00EF > EF +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > F4 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F7 > F7 +00F9 > F9 +00FA > 75 # unsup: 0075 0301 +00FB > FB +00FC > FC +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 8C +0153 > 9C +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +0192 > 83 +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > FC # unsup: 00FC 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > FC # unsup: 00FC 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C6 > 88 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +060C > A1 +061B > BA +061F > BF +0621 > C1 +0622 > C2 +0623 > C3 +0624 > C4 +0625 > C5 +0626 > C6 +0627 > C7 / + N 3 + 0653 > C2 + 0654 > C3 + 0655 > C5 + . +0628 > C8 +0629 > C9 +062A > CA +062B > CB +062C > CC +062D > CD +062E > CE +062F > CF +0630 > D0 +0631 > D1 +0632 > D2 +0633 > D3 +0634 > D4 +0635 > D5 +0636 > D6 +0637 > D8 +0638 > D9 +0639 > DA +063A > DB +0640 > DC +0641 > DD +0642 > DE +0643 > DF +0644 > E1 +0645 > E3 +0646 > E4 +0647 > E5 +0648 > E6 / + N 1 + 0654 > C4 + . +0649 > EC +064A > ED / + N 1 + 0654 > C6 + . +064B > F0 +064C > F1 +064D > F2 +064E > F3 +064F > F5 +0650 > F6 +0651 > F8 +0652 > FA +0679 > 8A +067E > 81 +0686 > 8D +0688 > 8F +0691 > 9A +0698 > 8E +06A9 > 98 +06AF > 90 +06BA > 9F +06BE > AA +06C1 > C0 +06C2 > C0 # unsup: 06C1 0654 +06D2 > FF +06D3 > FF # unsup: 06D2 0654 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +200C > 9D +200D > 9E +200E > FD +200F > FE +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > 80 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FB56 > 81 # compat +FB57 > 81 # compat +FB58 > 81 # compat +FB59 > 81 # compat +FB66 > 8A # compat +FB67 > 8A # compat +FB68 > 8A # compat +FB69 > 8A # compat +FB7A > 8D # compat +FB7B > 8D # compat +FB7C > 8D # compat +FB7D > 8D # compat +FB88 > 8F # compat +FB89 > 8F # compat +FB8A > 8E # compat +FB8B > 8E # compat +FB8C > 9A # compat +FB8D > 9A # compat +FB8E > 98 # compat +FB8F > 98 # compat +FB90 > 98 # compat +FB91 > 98 # compat +FB92 > 90 # compat +FB93 > 90 # compat +FB94 > 90 # compat +FB95 > 90 # compat +FB9E > 9F # compat +FB9F > 9F # compat +FBA6 > C0 # compat +FBA7 > C0 # compat +FBA8 > C0 # compat +FBA9 > C0 # compat +FBAA > AA # compat +FBAB > AA # compat +FBAC > AA # compat +FBAD > AA # compat +FBAE > FF # compat +FBAF > FF # compat +FBB0 > FF # unsup: 06D2 0654 +FBB1 > FF # unsup: 06D2 0654 +FBE8 > EC # compat +FBE9 > EC # compat +FBEA > C6 C7 # compat +FBEB > C6 C7 # compat +FBEE > C6 E6 # compat +FBEF > C6 E6 # compat +FBF9 > C6 EC # compat +FBFA > C6 EC # compat +FBFB > C6 EC # compat +FC00 > C6 CC # compat +FC01 > C6 CD # compat +FC02 > C6 E3 # compat +FC03 > C6 EC # compat +FC04 > C6 ED # compat +FC05 > C8 CC # compat +FC06 > C8 CD # compat +FC07 > C8 CE # compat +FC08 > C8 E3 # compat +FC09 > C8 EC # compat +FC0A > C8 ED # compat +FC0B > CA CC # compat +FC0C > CA CD # compat +FC0D > CA CE # compat +FC0E > CA E3 # compat +FC0F > CA EC # compat +FC10 > CA ED # compat +FC11 > CB CC # compat +FC12 > CB E3 # compat +FC13 > CB EC # compat +FC14 > CB ED # compat +FC15 > CC CD # compat +FC16 > CC E3 # compat +FC17 > CD CC # compat +FC18 > CD E3 # compat +FC19 > CE CC # compat +FC1A > CE CD # compat +FC1B > CE E3 # compat +FC1C > D3 CC # compat +FC1D > D3 CD # compat +FC1E > D3 CE # compat +FC1F > D3 E3 # compat +FC20 > D5 CD # compat +FC21 > D5 E3 # compat +FC22 > D6 CC # compat +FC23 > D6 CD # compat +FC24 > D6 CE # compat +FC25 > D6 E3 # compat +FC26 > D8 CD # compat +FC27 > D8 E3 # compat +FC28 > D9 E3 # compat +FC29 > DA CC # compat +FC2A > DA E3 # compat +FC2B > DB CC # compat +FC2C > DB E3 # compat +FC2D > DD CC # compat +FC2E > DD CD # compat +FC2F > DD CE # compat +FC30 > DD E3 # compat +FC31 > DD EC # compat +FC32 > DD ED # compat +FC33 > DE CD # compat +FC34 > DE E3 # compat +FC35 > DE EC # compat +FC36 > DE ED # compat +FC37 > DF C7 # compat +FC38 > DF CC # compat +FC39 > DF CD # compat +FC3A > DF CE # compat +FC3B > DF E1 # compat +FC3C > DF E3 # compat +FC3D > DF EC # compat +FC3E > DF ED # compat +FC3F > E1 CC # compat +FC40 > E1 CD # compat +FC41 > E1 CE # compat +FC42 > E1 E3 # compat +FC43 > E1 EC # compat +FC44 > E1 ED # compat +FC45 > E3 CC # compat +FC46 > E3 CD # compat +FC47 > E3 CE # compat +FC48 > E3 E3 # compat +FC49 > E3 EC # compat +FC4A > E3 ED # compat +FC4B > E4 CC # compat +FC4C > E4 CD # compat +FC4D > E4 CE # compat +FC4E > E4 E3 # compat +FC4F > E4 EC # compat +FC50 > E4 ED # compat +FC51 > E5 CC # compat +FC52 > E5 E3 # compat +FC53 > E5 EC # compat +FC54 > E5 ED # compat +FC55 > ED CC # compat +FC56 > ED CD # compat +FC57 > ED CE # compat +FC58 > ED E3 # compat +FC59 > ED EC # compat +FC5A > ED ED # compat +FC5B > D0 # unsup: 0630 0670 +FC5C > D1 # unsup: 0631 0670 +FC5D > EC # unsup: 0649 0670 +FC64 > C6 D1 # compat +FC65 > C6 D2 # compat +FC66 > C6 E3 # compat +FC67 > C6 E4 # compat +FC68 > C6 EC # compat +FC69 > C6 ED # compat +FC6A > C8 D1 # compat +FC6B > C8 D2 # compat +FC6C > C8 E3 # compat +FC6D > C8 E4 # compat +FC6E > C8 EC # compat +FC6F > C8 ED # compat +FC70 > CA D1 # compat +FC71 > CA D2 # compat +FC72 > CA E3 # compat +FC73 > CA E4 # compat +FC74 > CA EC # compat +FC75 > CA ED # compat +FC76 > CB D1 # compat +FC77 > CB D2 # compat +FC78 > CB E3 # compat +FC79 > CB E4 # compat +FC7A > CB EC # compat +FC7B > CB ED # compat +FC7C > DD EC # compat +FC7D > DD ED # compat +FC7E > DE EC # compat +FC7F > DE ED # compat +FC80 > DF C7 # compat +FC81 > DF E1 # compat +FC82 > DF E3 # compat +FC83 > DF EC # compat +FC84 > DF ED # compat +FC85 > E1 E3 # compat +FC86 > E1 EC # compat +FC87 > E1 ED # compat +FC88 > E3 C7 # compat +FC89 > E3 E3 # compat +FC8A > E4 D1 # compat +FC8B > E4 D2 # compat +FC8C > E4 E3 # compat +FC8D > E4 E4 # compat +FC8E > E4 EC # compat +FC8F > E4 ED # compat +FC90 > EC # unsup: 0649 0670 +FC91 > ED D1 # compat +FC92 > ED D2 # compat +FC93 > ED E3 # compat +FC94 > ED E4 # compat +FC95 > ED EC # compat +FC96 > ED ED # compat +FC97 > C6 CC # compat +FC98 > C6 CD # compat +FC99 > C6 CE # compat +FC9A > C6 E3 # compat +FC9B > C6 E5 # compat +FC9C > C8 CC # compat +FC9D > C8 CD # compat +FC9E > C8 CE # compat +FC9F > C8 E3 # compat +FCA0 > C8 E5 # compat +FCA1 > CA CC # compat +FCA2 > CA CD # compat +FCA3 > CA CE # compat +FCA4 > CA E3 # compat +FCA5 > CA E5 # compat +FCA6 > CB E3 # compat +FCA7 > CC CD # compat +FCA8 > CC E3 # compat +FCA9 > CD CC # compat +FCAA > CD E3 # compat +FCAB > CE CC # compat +FCAC > CE E3 # compat +FCAD > D3 CC # compat +FCAE > D3 CD # compat +FCAF > D3 CE # compat +FCB0 > D3 E3 # compat +FCB1 > D5 CD # compat +FCB2 > D5 CE # compat +FCB3 > D5 E3 # compat +FCB4 > D6 CC # compat +FCB5 > D6 CD # compat +FCB6 > D6 CE # compat +FCB7 > D6 E3 # compat +FCB8 > D8 CD # compat +FCB9 > D9 E3 # compat +FCBA > DA CC # compat +FCBB > DA E3 # compat +FCBC > DB CC # compat +FCBD > DB E3 # compat +FCBE > DD CC # compat +FCBF > DD CD # compat +FCC0 > DD CE # compat +FCC1 > DD E3 # compat +FCC2 > DE CD # compat +FCC3 > DE E3 # compat +FCC4 > DF CC # compat +FCC5 > DF CD # compat +FCC6 > DF CE # compat +FCC7 > DF E1 # compat +FCC8 > DF E3 # compat +FCC9 > E1 CC # compat +FCCA > E1 CD # compat +FCCB > E1 CE # compat +FCCC > E1 E3 # compat +FCCD > E1 E5 # compat +FCCE > E3 CC # compat +FCCF > E3 CD # compat +FCD0 > E3 CE # compat +FCD1 > E3 E3 # compat +FCD2 > E4 CC # compat +FCD3 > E4 CD # compat +FCD4 > E4 CE # compat +FCD5 > E4 E3 # compat +FCD6 > E4 E5 # compat +FCD7 > E5 CC # compat +FCD8 > E5 E3 # compat +FCD9 > E5 # unsup: 0647 0670 +FCDA > ED CC # compat +FCDB > ED CD # compat +FCDC > ED CE # compat +FCDD > ED E3 # compat +FCDE > ED E5 # compat +FCDF > C6 E3 # compat +FCE0 > C6 E5 # compat +FCE1 > C8 E3 # compat +FCE2 > C8 E5 # compat +FCE3 > CA E3 # compat +FCE4 > CA E5 # compat +FCE5 > CB E3 # compat +FCE6 > CB E5 # compat +FCE7 > D3 E3 # compat +FCE8 > D3 E5 # compat +FCE9 > D4 E3 # compat +FCEA > D4 E5 # compat +FCEB > DF E1 # compat +FCEC > DF E3 # compat +FCED > E1 E3 # compat +FCEE > E4 E3 # compat +FCEF > E4 E5 # compat +FCF0 > ED E3 # compat +FCF1 > ED E5 # compat +FCF2 > DC F3 F8 # compat +FCF3 > DC F5 F8 # compat +FCF4 > DC F6 F8 # compat +FCF5 > D8 EC # compat +FCF6 > D8 ED # compat +FCF7 > DA EC # compat +FCF8 > DA ED # compat +FCF9 > DB EC # compat +FCFA > DB ED # compat +FCFB > D3 EC # compat +FCFC > D3 ED # compat +FCFD > D4 EC # compat +FCFE > D4 ED # compat +FCFF > CD EC # compat +FD00 > CD ED # compat +FD01 > CC EC # compat +FD02 > CC ED # compat +FD03 > CE EC # compat +FD04 > CE ED # compat +FD05 > D5 EC # compat +FD06 > D5 ED # compat +FD07 > D6 EC # compat +FD08 > D6 ED # compat +FD09 > D4 CC # compat +FD0A > D4 CD # compat +FD0B > D4 CE # compat +FD0C > D4 E3 # compat +FD0D > D4 D1 # compat +FD0E > D3 D1 # compat +FD0F > D5 D1 # compat +FD10 > D6 D1 # compat +FD11 > D8 EC # compat +FD12 > D8 ED # compat +FD13 > DA EC # compat +FD14 > DA ED # compat +FD15 > DB EC # compat +FD16 > DB ED # compat +FD17 > D3 EC # compat +FD18 > D3 ED # compat +FD19 > D4 EC # compat +FD1A > D4 ED # compat +FD1B > CD EC # compat +FD1C > CD ED # compat +FD1D > CC EC # compat +FD1E > CC ED # compat +FD1F > CE EC # compat +FD20 > CE ED # compat +FD21 > D5 EC # compat +FD22 > D5 ED # compat +FD23 > D6 EC # compat +FD24 > D6 ED # compat +FD25 > D4 CC # compat +FD26 > D4 CD # compat +FD27 > D4 CE # compat +FD28 > D4 E3 # compat +FD29 > D4 D1 # compat +FD2A > D3 D1 # compat +FD2B > D5 D1 # compat +FD2C > D6 D1 # compat +FD2D > D4 CC # compat +FD2E > D4 CD # compat +FD2F > D4 CE # compat +FD30 > D4 E3 # compat +FD31 > D3 E5 # compat +FD32 > D4 E5 # compat +FD33 > D8 E3 # compat +FD34 > D3 CC # compat +FD35 > D3 CD # compat +FD36 > D3 CE # compat +FD37 > D4 CC # compat +FD38 > D4 CD # compat +FD39 > D4 CE # compat +FD3A > D8 E3 # compat +FD3B > D9 E3 # compat +FD3C > C7 F0 # compat +FD3D > C7 F0 # compat +FD50 > CA CC E3 # compat +FD51 > CA CD CC # compat +FD52 > CA CD CC # compat +FD53 > CA CD E3 # compat +FD54 > CA CE E3 # compat +FD55 > CA E3 CC # compat +FD56 > CA E3 CD # compat +FD57 > CA E3 CE # compat +FD58 > CC E3 CD # compat +FD59 > CC E3 CD # compat +FD5A > CD E3 ED # compat +FD5B > CD E3 EC # compat +FD5C > D3 CD CC # compat +FD5D > D3 CC CD # compat +FD5E > D3 CC EC # compat +FD5F > D3 E3 CD # compat +FD60 > D3 E3 CD # compat +FD61 > D3 E3 CC # compat +FD62 > D3 E3 E3 # compat +FD63 > D3 E3 E3 # compat +FD64 > D5 CD CD # compat +FD65 > D5 CD CD # compat +FD66 > D5 E3 E3 # compat +FD67 > D4 CD E3 # compat +FD68 > D4 CD E3 # compat +FD69 > D4 CC ED # compat +FD6A > D4 E3 CE # compat +FD6B > D4 E3 CE # compat +FD6C > D4 E3 E3 # compat +FD6D > D4 E3 E3 # compat +FD6E > D6 CD EC # compat +FD6F > D6 CE E3 # compat +FD70 > D6 CE E3 # compat +FD71 > D8 E3 CD # compat +FD72 > D8 E3 CD # compat +FD73 > D8 E3 E3 # compat +FD74 > D8 E3 ED # compat +FD75 > DA CC E3 # compat +FD76 > DA E3 E3 # compat +FD77 > DA E3 E3 # compat +FD78 > DA E3 EC # compat +FD79 > DB E3 E3 # compat +FD7A > DB E3 ED # compat +FD7B > DB E3 EC # compat +FD7C > DD CE E3 # compat +FD7D > DD CE E3 # compat +FD7E > DE E3 CD # compat +FD7F > DE E3 E3 # compat +FD80 > E1 CD E3 # compat +FD81 > E1 CD ED # compat +FD82 > E1 CD EC # compat +FD83 > E1 CC CC # compat +FD84 > E1 CC CC # compat +FD85 > E1 CE E3 # compat +FD86 > E1 CE E3 # compat +FD87 > E1 E3 CD # compat +FD88 > E1 E3 CD # compat +FD89 > E3 CD CC # compat +FD8A > E3 CD E3 # compat +FD8B > E3 CD ED # compat +FD8C > E3 CC CD # compat +FD8D > E3 CC E3 # compat +FD8E > E3 CE CC # compat +FD8F > E3 CE E3 # compat +FD92 > E3 CC CE # compat +FD93 > E5 E3 CC # compat +FD94 > E5 E3 E3 # compat +FD95 > E4 CD E3 # compat +FD96 > E4 CD EC # compat +FD97 > E4 CC E3 # compat +FD98 > E4 CC E3 # compat +FD99 > E4 CC EC # compat +FD9A > E4 E3 ED # compat +FD9B > E4 E3 EC # compat +FD9C > ED E3 E3 # compat +FD9D > ED E3 E3 # compat +FD9E > C8 CE ED # compat +FD9F > CA CC ED # compat +FDA0 > CA CC EC # compat +FDA1 > CA CE ED # compat +FDA2 > CA CE EC # compat +FDA3 > CA E3 ED # compat +FDA4 > CA E3 EC # compat +FDA5 > CC E3 ED # compat +FDA6 > CC CD EC # compat +FDA7 > CC E3 EC # compat +FDA8 > D3 CE EC # compat +FDA9 > D5 CD ED # compat +FDAA > D4 CD ED # compat +FDAB > D6 CD ED # compat +FDAC > E1 CC ED # compat +FDAD > E1 E3 ED # compat +FDAE > ED CD ED # compat +FDAF > ED CC ED # compat +FDB0 > ED E3 ED # compat +FDB1 > E3 E3 ED # compat +FDB2 > DE E3 ED # compat +FDB3 > E4 CD ED # compat +FDB4 > DE E3 CD # compat +FDB5 > E1 CD E3 # compat +FDB6 > DA E3 ED # compat +FDB7 > DF E3 ED # compat +FDB8 > E4 CC CD # compat +FDB9 > E3 CE ED # compat +FDBA > E1 CC E3 # compat +FDBB > DF E3 E3 # compat +FDBC > E1 CC E3 # compat +FDBD > E4 CC CD # compat +FDBE > CC CD ED # compat +FDBF > CD CC ED # compat +FDC0 > E3 CC ED # compat +FDC1 > DD E3 ED # compat +FDC2 > C8 CD ED # compat +FDC3 > DF E3 E3 # compat +FDC4 > DA CC E3 # compat +FDC5 > D5 E3 E3 # compat +FDC6 > D3 CE ED # compat +FDC7 > E4 CC ED # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FE71 > DC F0 # compat +FE77 > DC F3 # compat +FE79 > DC F5 # compat +FE7B > DC F6 # compat +FE7D > DC F8 # compat +FE7F > DC FA # compat +FE80 > C1 # compat +FE81 > C2 # compat +FE82 > C2 # compat +FE83 > C3 # compat +FE84 > C3 # compat +FE85 > C4 # compat +FE86 > C4 # compat +FE87 > C5 # compat +FE88 > C5 # compat +FE89 > C6 # compat +FE8A > C6 # compat +FE8B > C6 # compat +FE8C > C6 # compat +FE8D > C7 # compat +FE8E > C7 # compat +FE8F > C8 # compat +FE90 > C8 # compat +FE91 > C8 # compat +FE92 > C8 # compat +FE93 > C9 # compat +FE94 > C9 # compat +FE95 > CA # compat +FE96 > CA # compat +FE97 > CA # compat +FE98 > CA # compat +FE99 > CB # compat +FE9A > CB # compat +FE9B > CB # compat +FE9C > CB # compat +FE9D > CC # compat +FE9E > CC # compat +FE9F > CC # compat +FEA0 > CC # compat +FEA1 > CD # compat +FEA2 > CD # compat +FEA3 > CD # compat +FEA4 > CD # compat +FEA5 > CE # compat +FEA6 > CE # compat +FEA7 > CE # compat +FEA8 > CE # compat +FEA9 > CF # compat +FEAA > CF # compat +FEAB > D0 # compat +FEAC > D0 # compat +FEAD > D1 # compat +FEAE > D1 # compat +FEAF > D2 # compat +FEB0 > D2 # compat +FEB1 > D3 # compat +FEB2 > D3 # compat +FEB3 > D3 # compat +FEB4 > D3 # compat +FEB5 > D4 # compat +FEB6 > D4 # compat +FEB7 > D4 # compat +FEB8 > D4 # compat +FEB9 > D5 # compat +FEBA > D5 # compat +FEBB > D5 # compat +FEBC > D5 # compat +FEBD > D6 # compat +FEBE > D6 # compat +FEBF > D6 # compat +FEC0 > D6 # compat +FEC1 > D8 # compat +FEC2 > D8 # compat +FEC3 > D8 # compat +FEC4 > D8 # compat +FEC5 > D9 # compat +FEC6 > D9 # compat +FEC7 > D9 # compat +FEC8 > D9 # compat +FEC9 > DA # compat +FECA > DA # compat +FECB > DA # compat +FECC > DA # compat +FECD > DB # compat +FECE > DB # compat +FECF > DB # compat +FED0 > DB # compat +FED1 > DD # compat +FED2 > DD # compat +FED3 > DD # compat +FED4 > DD # compat +FED5 > DE # compat +FED6 > DE # compat +FED7 > DE # compat +FED8 > DE # compat +FED9 > DF # compat +FEDA > DF # compat +FEDB > DF # compat +FEDC > DF # compat +FEDD > E1 # compat +FEDE > E1 # compat +FEDF > E1 # compat +FEE0 > E1 # compat +FEE1 > E3 # compat +FEE2 > E3 # compat +FEE3 > E3 # compat +FEE4 > E3 # compat +FEE5 > E4 # compat +FEE6 > E4 # compat +FEE7 > E4 # compat +FEE8 > E4 # compat +FEE9 > E5 # compat +FEEA > E5 # compat +FEEB > E5 # compat +FEEC > E5 # compat +FEED > E6 # compat +FEEE > E6 # compat +FEEF > EC # compat +FEF0 > EC # compat +FEF1 > ED # compat +FEF2 > ED # compat +FEF3 > ED # compat +FEF4 > ED # compat +FEF5 > E1 C2 # compat +FEF6 > E1 C2 # compat +FEF7 > E1 C3 # compat +FEF8 > E1 C3 # compat +FEF9 > E1 C5 # compat +FEFA > E1 C5 # compat +FEFB > E1 C7 # compat +FEFC > E1 C7 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 260 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 2 + 0300 > E0 + 0302 > E2 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 2 + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F / + N 1 + 0302 > F4 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 / + N 3 + 0300 > F9 + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +00A0 > A0 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00D7 > D7 +00E0 > E0 +00E2 > E2 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EE > EE +00EF > EF +00F4 > F4 +00F7 > F7 +00F9 > F9 +00FB > FB +00FC > FC +0152 > 8C +0153 > 9C +0192 > 83 +02C6 > 88 +037E > 3B +0387 > B7 +060C > A1 +061B > BA +061F > BF +0621 > C1 +0622 > C2 +0623 > C3 +0624 > C4 +0625 > C5 +0626 > C6 +0627 > C7 / + N 3 + 0653 > C2 + 0654 > C3 + 0655 > C5 + . +0628 > C8 +0629 > C9 +062A > CA +062B > CB +062C > CC +062D > CD +062E > CE +062F > CF +0630 > D0 +0631 > D1 +0632 > D2 +0633 > D3 +0634 > D4 +0635 > D5 +0636 > D6 +0637 > D8 +0638 > D9 +0639 > DA +063A > DB +0640 > DC +0641 > DD +0642 > DE +0643 > DF +0644 > E1 +0645 > E3 +0646 > E4 +0647 > E5 +0648 > E6 / + N 1 + 0654 > C4 + . +0649 > EC +064A > ED / + N 1 + 0654 > C6 + . +064B > F0 +064C > F1 +064D > F2 +064E > F3 +064F > F5 +0650 > F6 +0651 > F8 +0652 > FA +0679 > 8A +067E > 81 +0686 > 8D +0688 > 8F +0691 > 9A +0698 > 8E +06A9 > 98 +06AF > 90 +06BA > 9F +06BE > AA +06C1 > C0 +06D2 > FF +1FEF > 60 +1FFD > B4 +200C > 9D +200D > 9E +200E > FD +200F > FE +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AC > 80 +2122 > 99 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 067E +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 0679 +8B > 2039 +8C > 0152 +8D > 0686 +8E > 0698 +8F > 0688 +90 > 06AF +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 06A9 +99 > 2122 +9A > 0691 +9B > 203A +9C > 0153 +9D > 200C +9E > 200D +9F > 06BA +A0 > 00A0 +A1 > 060C +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 06BE +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 061B +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 061F +C0 > 06C1 +C1 > 0621 +C2 > 0627 0653 +C3 > 0627 0654 +C4 > 0648 0654 +C5 > 0627 0655 +C6 > 064A 0654 +C7 > 0627 +C8 > 0628 +C9 > 0629 +CA > 062A +CB > 062B +CC > 062C +CD > 062D +CE > 062E +CF > 062F +D0 > 0630 +D1 > 0631 +D2 > 0632 +D3 > 0633 +D4 > 0634 +D5 > 0635 +D6 > 0636 +D7 > 00D7 +D8 > 0637 +D9 > 0638 +DA > 0639 +DB > 063A +DC > 0640 +DD > 0641 +DE > 0642 +DF > 0643 +E0 > 0061 0300 +E1 > 0644 +E2 > 0061 0302 +E3 > 0645 +E4 > 0646 +E5 > 0647 +E6 > 0648 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0649 +ED > 064A +EE > 0069 0302 +EF > 0069 0308 +F0 > 064B +F1 > 064C +F2 > 064D +F3 > 064E +F4 > 006F 0302 +F5 > 064F +F6 > 0650 +F7 > 00F7 +F8 > 0651 +F9 > 0075 0300 +FA > 0652 +FB > 0075 0302 +FC > 0075 0308 +FD > 200E +FE > 200F +FF > 06D2 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 067E +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 0679 +8B > 2039 +8C > 0152 +8D > 0686 +8E > 0698 +8F > 0688 +90 > 06AF +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 06A9 +99 > 2122 +9A > 0691 +9B > 203A +9C > 0153 +9D > 200C +9E > 200D +9F > 06BA +A0 > 00A0 +A1 > 060C +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 06BE +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 061B +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 061F +C0 > 06C1 +C1 > 0621 +C2 > 0622 +C3 > 0623 +C4 > 0624 +C5 > 0625 +C6 > 0626 +C7 > 0627 +C8 > 0628 +C9 > 0629 +CA > 062A +CB > 062B +CC > 062C +CD > 062D +CE > 062E +CF > 062F +D0 > 0630 +D1 > 0631 +D2 > 0632 +D3 > 0633 +D4 > 0634 +D5 > 0635 +D6 > 0636 +D7 > 00D7 +D8 > 0637 +D9 > 0638 +DA > 0639 +DB > 063A +DC > 0640 +DD > 0641 +DE > 0642 +DF > 0643 +E0 > 00E0 +E1 > 0644 +E2 > 00E2 +E3 > 0645 +E4 > 0646 +E5 > 0647 +E6 > 0648 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 0649 +ED > 064A +EE > 00EE +EF > 00EF +F0 > 064B +F1 > 064C +F2 > 064D +F3 > 064E +F4 > 00F4 +F5 > 064F +F6 > 0650 +F7 > 00F7 +F8 > 0651 +F9 > 00F9 +FA > 0652 +FB > 00FB +FC > 00FC +FD > 200E +FE > 200F +FF > 06D2 +. + +COMP += NFC +. diff --git a/assets/data/cp1256.cset b/assets/data/cp1256.cset new file mode 100644 index 0000000..fb3de64 --- /dev/null +++ b/assets/data/cp1256.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1256 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 20AC - Y 80 80 80 00 00 00 # EURO SIGN +81 067E L Y 81 81 81 81 81 81 # ARABIC LETTER PEH +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 0679 L Y 8A 8A 8A 8A 8A 8A # ARABIC LETTER TTEH +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 0152 L Y 8C 9C 8C 8C 2A 00 # LATIN CAPITAL LIGATURE OE +8D 0686 L Y 8D 8D 8D 8D 8D 8D # ARABIC LETTER TCHEH +8E 0698 L Y 8E 8E 8E 8E 8E 8E # ARABIC LETTER JEH +8F 0688 L Y 8F 8F 8F 8F 8F 8F # ARABIC LETTER DDAL +90 06AF L Y 90 90 90 90 90 90 # ARABIC LETTER GAF +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 06A9 L Y 98 98 98 98 98 98 # ARABIC LETTER KEHEH +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 0691 L Y 9A 9A 9A 9A 9A 9A # ARABIC LETTER RREH +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 0153 L Y 8C 9C 8C 9C 2A 00 # LATIN SMALL LIGATURE OE +9D 200C - N 9D 9D 9D 00 00 00 # ZERO WIDTH NON-JOINER +9E 200D - N 9E 9E 9E 00 00 00 # ZERO WIDTH JOINER +9F 06BA L Y 9F 9F 9F 9F 9F 9F # ARABIC LETTER NOON GHUNNA +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 060C - Y A1 A1 A1 00 00 00 # ARABIC COMMA +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 06BE L Y AA AA AA AA AA AA # ARABIC LETTER HEH DOACHASHMEE +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 061B - Y BA BA BA 00 00 00 # ARABIC SEMICOLON +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 061F - Y BF BF BF 00 00 00 # ARABIC QUESTION MARK +C0 06C1 L Y C0 C0 C0 C0 C0 C0 # ARABIC LETTER HEH GOAL +C1 0621 L Y C1 C1 C1 C1 C1 C1 # ARABIC LETTER HAMZA +C2 0622 L Y C2 C2 C2 C7 C7 C7 # ARABIC LETTER ALEF WITH MADDA ABOVE +C3 0623 L Y C3 C3 C3 C7 C7 C7 # ARABIC LETTER ALEF WITH HAMZA ABOVE +C4 0624 L Y C4 C4 C4 E6 E6 E6 # ARABIC LETTER WAW WITH HAMZA ABOVE +C5 0625 L Y C5 C5 C5 C7 C7 C7 # ARABIC LETTER ALEF WITH HAMZA BELOW +C6 0626 L Y C6 C6 C6 ED ED ED # ARABIC LETTER YEH WITH HAMZA ABOVE +C7 0627 L Y C7 C7 C7 C7 C7 C7 # ARABIC LETTER ALEF +C8 0628 L Y C8 C8 C8 C8 C8 C8 # ARABIC LETTER BEH +C9 0629 L Y C9 C9 C9 C9 C9 C9 # ARABIC LETTER TEH MARBUTA +CA 062A L Y CA CA CA CA CA CA # ARABIC LETTER TEH +CB 062B L Y CB CB CB CB CB CB # ARABIC LETTER THEH +CC 062C L Y CC CC CC CC CC CC # ARABIC LETTER JEEM +CD 062D L Y CD CD CD CD CD CD # ARABIC LETTER HAH +CE 062E L Y CE CE CE CE CE CE # ARABIC LETTER KHAH +CF 062F L Y CF CF CF CF CF CF # ARABIC LETTER DAL +D0 0630 L Y D0 D0 D0 D0 D0 D0 # ARABIC LETTER THAL +D1 0631 L Y D1 D1 D1 D1 D1 D1 # ARABIC LETTER REH +D2 0632 L Y D2 D2 D2 D2 D2 D2 # ARABIC LETTER ZAIN +D3 0633 L Y D3 D3 D3 D3 D3 D3 # ARABIC LETTER SEEN +D4 0634 L Y D4 D4 D4 D4 D4 D4 # ARABIC LETTER SHEEN +D5 0635 L Y D5 D5 D5 D5 D5 D5 # ARABIC LETTER SAD +D6 0636 L Y D6 D6 D6 D6 D6 D6 # ARABIC LETTER DAD +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 0637 L Y D8 D8 D8 D8 D8 D8 # ARABIC LETTER TAH +D9 0638 L Y D9 D9 D9 D9 D9 D9 # ARABIC LETTER ZAH +DA 0639 L Y DA DA DA DA DA DA # ARABIC LETTER AIN +DB 063A L Y DB DB DB DB DB DB # ARABIC LETTER GHAIN +DC 0640 l Y DC DC DC DC DC DC # ARABIC TATWEEL +DD 0641 L Y DD DD DD DD DD DD # ARABIC LETTER FEH +DE 0642 L Y DE DE DE DE DE DE # ARABIC LETTER QAF +DF 0643 L Y DF DF DF DF DF DF # ARABIC LETTER KAF +E0 00E0 L Y E0 E0 E0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 0644 L Y E1 E1 E1 E1 E1 E1 # ARABIC LETTER LAM +E2 00E2 L Y E2 E2 E2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 0645 L Y E3 E3 E3 E3 E3 E3 # ARABIC LETTER MEEM +E4 0646 L Y E4 E4 E4 E4 E4 E4 # ARABIC LETTER NOON +E5 0647 L Y E5 E5 E5 E5 E5 E5 # ARABIC LETTER HEH +E6 0648 L Y E6 E6 E6 E6 E6 E6 # ARABIC LETTER WAW +E7 00E7 L Y E7 E7 E7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y E8 E8 E8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y E9 E9 E9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y EA EA EA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y EB EB EB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 0649 L Y EC EC EC EC EC EC # ARABIC LETTER ALEF MAKSURA +ED 064A L Y ED ED ED ED ED ED # ARABIC LETTER YEH +EE 00EE L Y EE EE EE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y EF EF EF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 064B M M F0 F0 F0 00 00 00 # ARABIC FATHATAN +F1 064C M M F1 F1 F1 00 00 00 # ARABIC DAMMATAN +F2 064D M M F2 F2 F2 00 00 00 # ARABIC KASRATAN +F3 064E M M F3 F3 F3 00 00 00 # ARABIC FATHA +F4 00F4 L Y F4 F4 F4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 064F M M F5 F5 F5 00 00 00 # ARABIC DAMMA +F6 0650 M M F6 F6 F6 00 00 00 # ARABIC KASRA +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 0651 M M F8 F8 F8 00 00 00 # ARABIC SHADDA +F9 00F9 L Y F9 F9 F9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 0652 M M FA FA FA 00 00 00 # ARABIC SUKUN +FB 00FB L Y FB FB FB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y FC FC FC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 200E - N FD FD FD 00 00 00 # LEFT-TO-RIGHT MARK +FE 200F - N FE FE FE 00 00 00 # RIGHT-TO-LEFT MARK +FF 06D2 L Y FF FF FF FF FF FF # ARABIC LETTER YEH BARREE diff --git a/assets/data/cp1257.cmap b/assets/data/cp1257.cmap new file mode 100644 index 0000000..232d97e --- /dev/null +++ b/assets/data/cp1257.cmap @@ -0,0 +1,1962 @@ +INTERNAL +/ +N 949 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 4 + 0304 > C2 + 0308 > C4 + 030A > C5 + 0328 > C0 + . +0042 > 42 +0043 > 43 / + N 2 + 0301 > C3 + 030C > C8 + . +0044 > 44 +0045 > 45 / + N 4 + 0301 > C9 + 0304 > C7 + 0307 > CB + 0328 > C6 + . +0046 > 46 +0047 > 47 / + N 1 + 0327 > CC + . +0048 > 48 +0049 > 49 / + N 2 + 0304 > CE + 0328 > C1 + . +004A > 4A +004B > 4B / + N 1 + 0327 > CD + . +004C > 4C / + N 1 + 0327 > CF + . +004D > 4D +004E > 4E / + N 2 + 0301 > D1 + 0327 > D2 + . +004F > 4F / + N 4 + 0301 > D3 + 0303 > D5 + 0304 > D4 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 1 + 0327 > AA + . +0053 > 53 / + N 2 + 0301 > DA + 030C > D0 + . +0054 > 54 +0055 > 55 / + N 3 + 0304 > DB + 0308 > DC + 0328 > D8 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A / + N 3 + 0301 > CA + 0307 > DD + 030C > DE + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 4 + 0304 > E2 + 0308 > E4 + 030A > E5 + 0328 > E0 + . +0062 > 62 +0063 > 63 / + N 2 + 0301 > E3 + 030C > E8 + . +0064 > 64 +0065 > 65 / + N 4 + 0301 > E9 + 0304 > E7 + 0307 > EB + 0328 > E6 + . +0066 > 66 +0067 > 67 / + N 1 + 0327 > EC + . +0068 > 68 +0069 > 69 / + N 2 + 0304 > EE + 0328 > E1 + . +006A > 6A +006B > 6B / + N 1 + 0327 > ED + . +006C > 6C / + N 1 + 0327 > EF + . +006D > 6D +006E > 6E / + N 2 + 0301 > F1 + 0327 > F2 + . +006F > 6F / + N 4 + 0301 > F3 + 0303 > F5 + 0304 > F4 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 1 + 0327 > BA + . +0073 > 73 / + N 2 + 0301 > FA + 030C > F0 + . +0074 > 74 +0075 > 75 / + N 3 + 0304 > FB + 0308 > FC + 0328 > F8 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A / + N 3 + 0301 > EA + 0307 > FD + 030C > FE + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +0083 > 83 +0088 > 88 +008A > 8A +008C > 8C +0090 > 90 +0098 > 98 +009A > 9A +009C > 9C +009F > 9F +00A0 > A0 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A6 > A6 +00A7 > A7 +00A8 > 8D +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > 9D +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > 8F +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > C4 +00C5 > C5 +00C6 > AF +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > C9 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > D3 +00D4 > 4F # unsup: 004F 0302 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > A8 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > DC +00DD > 59 # unsup: 0059 0301 +00DF > DF +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > E4 +00E5 > E5 +00E6 > BF +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > E9 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > F3 +00F4 > 6F # unsup: 006F 0302 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > B8 +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > FC +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > C2 +0101 > E2 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > C0 +0105 > E0 +0106 > C3 +0107 > E3 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > C8 +010D > E8 +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > C7 +0113 > E7 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > CB +0117 > EB +0118 > C6 +0119 > E6 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > CC +0123 > EC +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > CE +012B > EE +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > C1 +012F > E1 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > CD +0137 > ED +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > CF +013C > EF +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0141 > D9 +0142 > F9 +0143 > D1 +0144 > F1 +0145 > D2 +0146 > F2 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > D4 +014D > F4 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > AA +0157 > BA +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > DA +015B > FA +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > D0 +0161 > F0 +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > DB +016B > FB +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > D8 +0173 > F8 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > CA +017A > EA +017B > DD +017C > FD +017D > DE +017E > FE +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 DE # compat +01C5 > 44 FE # compat +01C6 > 64 FE # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > AF # unsup: 00C6 0304 +01E3 > BF # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > AF # unsup: 00C6 0301 +01FD > BF # unsup: 00E6 0301 +01FE > A8 # unsup: 00D8 0301 +01FF > B8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C7 > 8E +02D9 > FF +02DB > 9E +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > 8D # unsup: 00A8 0301 +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > C7 # unsup: 0112 0300 +1E15 > E7 # unsup: 0113 0300 +1E16 > C7 # unsup: 0112 0301 +1E17 > E7 # unsup: 0113 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > D4 # unsup: 014C 0300 +1E51 > F4 # unsup: 014D 0300 +1E52 > D4 # unsup: 014C 0301 +1E53 > F4 # unsup: 014D 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > DA # unsup: 015A 0307 +1E65 > FA # unsup: 015B 0307 +1E66 > D0 # unsup: 0160 0307 +1E67 > F0 # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > DB # unsup: 016A 0308 +1E7B > FB # unsup: 016B 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > 8D # unsup: 00A8 0342 +1FED > 8D # unsup: 00A8 0300 +1FEE > 8D # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > 80 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > 9D # compat +FFE4 > A6 # compat +. + +STRICT +/ +N 258 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 4 + 0304 > C2 + 0308 > C4 + 030A > C5 + 0328 > C0 + . +0042 > 42 +0043 > 43 / + N 2 + 0301 > C3 + 030C > C8 + . +0044 > 44 +0045 > 45 / + N 4 + 0301 > C9 + 0304 > C7 + 0307 > CB + 0328 > C6 + . +0046 > 46 +0047 > 47 / + N 1 + 0327 > CC + . +0048 > 48 +0049 > 49 / + N 2 + 0304 > CE + 0328 > C1 + . +004A > 4A +004B > 4B / + N 1 + 0327 > CD + . +004C > 4C / + N 1 + 0327 > CF + . +004D > 4D +004E > 4E / + N 2 + 0301 > D1 + 0327 > D2 + . +004F > 4F / + N 4 + 0301 > D3 + 0303 > D5 + 0304 > D4 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 1 + 0327 > AA + . +0053 > 53 / + N 2 + 0301 > DA + 030C > D0 + . +0054 > 54 +0055 > 55 / + N 3 + 0304 > DB + 0308 > DC + 0328 > D8 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A / + N 3 + 0301 > CA + 0307 > DD + 030C > DE + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 4 + 0304 > E2 + 0308 > E4 + 030A > E5 + 0328 > E0 + . +0062 > 62 +0063 > 63 / + N 2 + 0301 > E3 + 030C > E8 + . +0064 > 64 +0065 > 65 / + N 4 + 0301 > E9 + 0304 > E7 + 0307 > EB + 0328 > E6 + . +0066 > 66 +0067 > 67 / + N 1 + 0327 > EC + . +0068 > 68 +0069 > 69 / + N 2 + 0304 > EE + 0328 > E1 + . +006A > 6A +006B > 6B / + N 1 + 0327 > ED + . +006C > 6C / + N 1 + 0327 > EF + . +006D > 6D +006E > 6E / + N 2 + 0301 > F1 + 0327 > F2 + . +006F > 6F / + N 4 + 0301 > F3 + 0303 > F5 + 0304 > F4 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 1 + 0327 > BA + . +0073 > 73 / + N 2 + 0301 > FA + 030C > F0 + . +0074 > 74 +0075 > 75 / + N 3 + 0304 > FB + 0308 > FC + 0328 > F8 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A / + N 3 + 0301 > EA + 0307 > FD + 030C > FE + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +0083 > 83 +0088 > 88 +008A > 8A +008C > 8C +0090 > 90 +0098 > 98 +009A > 9A +009C > 9C +009F > 9F +00A0 > A0 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A6 > A6 +00A7 > A7 +00A8 > 8D +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > 9D +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > 8F +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00C4 > C4 +00C5 > C5 +00C6 > AF +00C9 > C9 +00D3 > D3 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > A8 +00DC > DC +00DF > DF +00E4 > E4 +00E5 > E5 +00E6 > BF +00E9 > E9 +00F3 > F3 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > B8 +00FC > FC +0100 > C2 +0101 > E2 +0104 > C0 +0105 > E0 +0106 > C3 +0107 > E3 +010C > C8 +010D > E8 +0112 > C7 +0113 > E7 +0116 > CB +0117 > EB +0118 > C6 +0119 > E6 +0122 > CC +0123 > EC +012A > CE +012B > EE +012E > C1 +012F > E1 +0136 > CD +0137 > ED +013B > CF +013C > EF +0141 > D9 +0142 > F9 +0143 > D1 +0144 > F1 +0145 > D2 +0146 > F2 +014C > D4 +014D > F4 +0156 > AA +0157 > BA +015A > DA +015B > FA +0160 > D0 +0161 > F0 +016A > DB +016B > FB +0172 > D8 +0173 > F8 +0179 > CA +017A > EA +017B > DD +017C > FD +017D > DE +017E > FE +02C7 > 8E +02D9 > FF +02DB > 9E +037E > 3B +0387 > B7 +1FEF > 60 +1FFD > B4 +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AC > 80 +2122 > 99 +. + +NFD +/ +N 254 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0083 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 0088 +89 > 2030 +8A > 008A +8B > 2039 +8C > 008C +8D > 00A8 +8E > 02C7 +8F > 00B8 +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 0098 +99 > 2122 +9A > 009A +9B > 203A +9C > 009C +9D > 00AF +9E > 02DB +9F > 009F +A0 > 00A0 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A6 > 00A6 +A7 > 00A7 +A8 > 00D8 +A9 > 00A9 +AA > 0052 0327 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00C6 +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00F8 +B9 > 00B9 +BA > 0072 0327 +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00E6 +C0 > 0041 0328 +C1 > 0049 0328 +C2 > 0041 0304 +C3 > 0043 0301 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 0045 0328 +C7 > 0045 0304 +C8 > 0043 030C +C9 > 0045 0301 +CA > 005A 0301 +CB > 0045 0307 +CC > 0047 0327 +CD > 004B 0327 +CE > 0049 0304 +CF > 004C 0327 +D0 > 0053 030C +D1 > 004E 0301 +D2 > 004E 0327 +D3 > 004F 0301 +D4 > 004F 0304 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 00D7 +D8 > 0055 0328 +D9 > 0141 +DA > 0053 0301 +DB > 0055 0304 +DC > 0055 0308 +DD > 005A 0307 +DE > 005A 030C +DF > 00DF +E0 > 0061 0328 +E1 > 0069 0328 +E2 > 0061 0304 +E3 > 0063 0301 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 0065 0328 +E7 > 0065 0304 +E8 > 0063 030C +E9 > 0065 0301 +EA > 007A 0301 +EB > 0065 0307 +EC > 0067 0327 +ED > 006B 0327 +EE > 0069 0304 +EF > 006C 0327 +F0 > 0073 030C +F1 > 006E 0301 +F2 > 006E 0327 +F3 > 006F 0301 +F4 > 006F 0304 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 00F7 +F8 > 0075 0328 +F9 > 0142 +FA > 0073 0301 +FB > 0075 0304 +FC > 0075 0308 +FD > 007A 0307 +FE > 007A 030C +FF > 02D9 +. + +NFC +/ +N 254 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0083 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 0088 +89 > 2030 +8A > 008A +8B > 2039 +8C > 008C +8D > 00A8 +8E > 02C7 +8F > 00B8 +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 0098 +99 > 2122 +9A > 009A +9B > 203A +9C > 009C +9D > 00AF +9E > 02DB +9F > 009F +A0 > 00A0 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A6 > 00A6 +A7 > 00A7 +A8 > 00D8 +A9 > 00A9 +AA > 0156 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00C6 +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00F8 +B9 > 00B9 +BA > 0157 +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00E6 +C0 > 0104 +C1 > 012E +C2 > 0100 +C3 > 0106 +C4 > 00C4 +C5 > 00C5 +C6 > 0118 +C7 > 0112 +C8 > 010C +C9 > 00C9 +CA > 0179 +CB > 0116 +CC > 0122 +CD > 0136 +CE > 012A +CF > 013B +D0 > 0160 +D1 > 0143 +D2 > 0145 +D3 > 00D3 +D4 > 014C +D5 > 00D5 +D6 > 00D6 +D7 > 00D7 +D8 > 0172 +D9 > 0141 +DA > 015A +DB > 016A +DC > 00DC +DD > 017B +DE > 017D +DF > 00DF +E0 > 0105 +E1 > 012F +E2 > 0101 +E3 > 0107 +E4 > 00E4 +E5 > 00E5 +E6 > 0119 +E7 > 0113 +E8 > 010D +E9 > 00E9 +EA > 017A +EB > 0117 +EC > 0123 +ED > 0137 +EE > 012B +EF > 013C +F0 > 0161 +F1 > 0144 +F2 > 0146 +F3 > 00F3 +F4 > 014D +F5 > 00F5 +F6 > 00F6 +F7 > 00F7 +F8 > 0173 +F9 > 0142 +FA > 015B +FB > 016B +FC > 00FC +FD > 017C +FE > 017E +FF > 02D9 +. + +COMP += NFC +. diff --git a/assets/data/cp1257.cset b/assets/data/cp1257.cset new file mode 100644 index 0000000..696c15a --- /dev/null +++ b/assets/data/cp1257.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1257 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 20AC - Y 80 80 80 00 00 00 # EURO SIGN +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 00A8 - Y 8D 8D 8D 00 00 00 # DIAERESIS +8E 02C7 M Y 8E 8E 8E 00 00 00 # CARON +8F 00B8 - Y 8F 8F 8F 00 00 00 # CEDILLA +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 00AF - Y 9D 9D 9D 00 00 00 # MACRON +9E 02DB - Y 9E 9E 9E 00 00 00 # OGONEK +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 E0A1 . N A1 A1 A1 00 00 00 # <unused> +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 E0A5 . N A5 A5 A5 00 00 00 # <unused> +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00D8 L Y A8 B8 A8 A8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 0156 L Y AA BA AA 52 72 72 # LATIN CAPITAL LETTER R WITH CEDILLA +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00C6 L Y AF BF AF AF 2A 00 # LATIN CAPITAL LETTER AE +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00F8 L Y A8 B8 A8 B8 2A 00 # LATIN SMALL LETTER O WITH STROKE +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 0157 L Y AA BA AA 72 72 72 # LATIN SMALL LETTER R WITH CEDILLA +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 00E6 L Y AF BF AF BF 2A 00 # LATIN SMALL LETTER AE +C0 0104 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK +C1 012E L Y C1 E1 C1 49 2A 00 # LATIN CAPITAL LETTER I WITH OGONEK +C2 0100 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH MACRON +C3 0106 L Y C3 E3 C3 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 0118 L Y C6 E6 C6 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK +C7 0112 L Y C7 E7 C7 45 2A 00 # LATIN CAPITAL LETTER E WITH MACRON +C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 0179 L Y CA EA CA 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE +CB 0116 L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DOT ABOVE +CC 0122 L Y CC EC CC 47 67 67 # LATIN CAPITAL LETTER G WITH CEDILLA +CD 0136 L Y CD ED CD 4B 6B 6B # LATIN CAPITAL LETTER K WITH CEDILLA +CE 012A L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH MACRON +CF 013B L Y CF EF CF 4C 6C 6C # LATIN CAPITAL LETTER L WITH CEDILLA +D0 0160 L Y D0 F0 D0 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE +D2 0145 L Y D2 F2 D2 4E 6E 6E # LATIN CAPITAL LETTER N WITH CEDILLA +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 014C L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH MACRON +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 0172 L Y D8 F8 D8 55 2A 00 # LATIN CAPITAL LETTER U WITH OGONEK +D9 0141 L Y D9 F9 D9 D9 F9 F9 # LATIN CAPITAL LETTER L WITH STROKE +DA 015A L Y DA FA DA 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE +DB 016A L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH MACRON +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 017B L Y DD FD DD 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE +DE 017D L Y DE FE DE 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 0105 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK +E1 012F L Y C1 E1 C1 69 2A 00 # LATIN SMALL LETTER I WITH OGONEK +E2 0101 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH MACRON +E3 0107 L Y C3 E3 C3 63 63 63 # LATIN SMALL LETTER C WITH ACUTE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 0119 L Y C6 E6 C6 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK +E7 0113 L Y C7 E7 C7 65 2A 00 # LATIN SMALL LETTER E WITH MACRON +E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 017A L Y CA EA CA 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE +EB 0117 L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DOT ABOVE +EC 0123 L Y CC EC CC 67 67 67 # LATIN SMALL LETTER G WITH CEDILLA +ED 0137 L Y CD ED CD 6B 6B 6B # LATIN SMALL LETTER K WITH CEDILLA +EE 012B L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH MACRON +EF 013C L Y CF EF CF 6C 6C 6C # LATIN SMALL LETTER L WITH CEDILLA +F0 0161 L Y D0 F0 D0 73 73 73 # LATIN SMALL LETTER S WITH CARON +F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE +F2 0146 L Y D2 F2 D2 6E 6E 6E # LATIN SMALL LETTER N WITH CEDILLA +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 014D L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH MACRON +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 0173 L Y D8 F8 D8 75 2A 00 # LATIN SMALL LETTER U WITH OGONEK +F9 0142 L Y D9 F9 D9 F9 F9 F9 # LATIN SMALL LETTER L WITH STROKE +FA 015B L Y DA FA DA 73 73 73 # LATIN SMALL LETTER S WITH ACUTE +FB 016B L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH MACRON +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 017C L Y DD FD DD 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE +FE 017E L Y DE FE DE 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE diff --git a/assets/data/cp1258.cmap b/assets/data/cp1258.cmap new file mode 100644 index 0000000..859d742 --- /dev/null +++ b/assets/data/cp1258.cmap @@ -0,0 +1,2403 @@ +INTERNAL +/ +N 955 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0306 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 3 + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 4 + 0301 > D3 + 0302 > D4 + 0308 > D6 + 031B > D5 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 / + N 5 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + 031B > DD + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0308 > 9F + . +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0306 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 3 + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 4 + 0301 > F3 + 0302 > F4 + 0308 > F6 + 031B > F5 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 / + N 5 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + 031B > FD + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +008A > 8A +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +009A > 9A +009D > 9D +009E > 9E +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > 41 DE +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > 49 CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > 4F CC +00D3 > D3 +00D4 > D4 +00D5 > 4F DE +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > 59 EC +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > 61 DE +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > 69 CC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > 6F CC +00F3 > F3 +00F4 > F4 +00F5 > 6F DE +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > 79 EC +00FF > FF +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > C3 +0103 > E3 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 EC +0107 > 63 EC +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0110 > D0 +0111 > F0 +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 DE +0129 > 69 DE +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C EC +013A > 6C EC +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E EC +0144 > 6E EC +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 8C +0153 > 9C +0154 > 52 EC +0155 > 72 EC +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 EC +015B > 73 EC +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 DE +0169 > 75 DE +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 9F +0179 > 5A EC +017A > 7A EC +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +0192 > 83 +01A0 > D5 +01A1 > F5 +01AF > DD +01B0 > FD +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC EC +01D8 > FC EC +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC CC +01DC > FC CC +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 EC +01F5 > 67 EC +01F8 > 4E CC +01F9 > 6E CC +01FA > C5 EC +01FB > E5 EC +01FC > C6 EC +01FD > E6 EC +01FE > D8 EC +01FF > F8 EC +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > 4F DE # unsup: 004F 0303 0304 +022D > 6F DE # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C6 > 88 +02DC > 98 +0300 > CC +0301 > EC +0302 > 0 # unsup +0303 > DE +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > D2 +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > F2 +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > CC +0341 > EC +0342 > 0 # unsup +0343 > 0 # unsup +0344 > EC # unsup: 0308 0301 +0345 > 0 # unsup +037E > 3B +0385 > A8 EC +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 F2 +1E05 > 62 F2 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 EC +1E09 > E7 EC +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 F2 +1E0D > 64 F2 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 CC # unsup: 0045 0304 0300 +1E15 > 65 CC # unsup: 0065 0304 0300 +1E16 > 45 EC # unsup: 0045 0304 0301 +1E17 > 65 EC # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 F2 +1E25 > 68 F2 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF EC +1E2F > EF EC +1E30 > 4B EC +1E31 > 6B EC +1E32 > 4B F2 +1E33 > 6B F2 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C F2 +1E37 > 6C F2 +1E38 > 4C F2 # unsup: 004C 0323 0304 +1E39 > 6C F2 # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D EC +1E3F > 6D EC +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D F2 +1E43 > 6D F2 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E F2 +1E47 > 6E F2 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F DE EC +1E4D > 6F DE EC +1E4E > 4F DE # unsup: 004F 0303 0308 +1E4F > 6F DE # unsup: 006F 0303 0308 +1E50 > 4F CC # unsup: 004F 0304 0300 +1E51 > 6F CC # unsup: 006F 0304 0300 +1E52 > 4F EC # unsup: 004F 0304 0301 +1E53 > 6F EC # unsup: 006F 0304 0301 +1E54 > 50 EC +1E55 > 70 EC +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 F2 +1E5B > 72 F2 +1E5C > 52 F2 # unsup: 0052 0323 0304 +1E5D > 72 F2 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 F2 +1E63 > 73 F2 +1E64 > 53 EC # unsup: 0053 0301 0307 +1E65 > 73 EC # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 F2 # unsup: 0053 0323 0307 +1E69 > 73 F2 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 F2 +1E6D > 74 F2 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 DE EC +1E79 > 75 DE EC +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 DE +1E7D > 76 DE +1E7E > 56 F2 +1E7F > 76 F2 +1E80 > 57 CC +1E81 > 77 CC +1E82 > 57 EC +1E83 > 77 EC +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 F2 +1E89 > 77 F2 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A F2 +1E93 > 7A F2 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 F2 +1EA1 > 61 F2 +1EA2 > 41 D2 +1EA3 > 61 D2 +1EA4 > C2 EC +1EA5 > E2 EC +1EA6 > C2 CC +1EA7 > E2 CC +1EA8 > C2 D2 +1EA9 > E2 D2 +1EAA > C2 DE +1EAB > E2 DE +1EAC > 41 F2 # unsup: 0041 0323 0302 +1EAD > 61 F2 # unsup: 0061 0323 0302 +1EAE > C3 EC +1EAF > E3 EC +1EB0 > C3 CC +1EB1 > E3 CC +1EB2 > C3 D2 +1EB3 > E3 D2 +1EB4 > C3 DE +1EB5 > E3 DE +1EB6 > 41 F2 # unsup: 0041 0323 0306 +1EB7 > 61 F2 # unsup: 0061 0323 0306 +1EB8 > 45 F2 +1EB9 > 65 F2 +1EBA > 45 D2 +1EBB > 65 D2 +1EBC > 45 DE +1EBD > 65 DE +1EBE > CA EC +1EBF > EA EC +1EC0 > CA CC +1EC1 > EA CC +1EC2 > CA D2 +1EC3 > EA D2 +1EC4 > CA DE +1EC5 > EA DE +1EC6 > 45 F2 # unsup: 0045 0323 0302 +1EC7 > 65 F2 # unsup: 0065 0323 0302 +1EC8 > 49 D2 +1EC9 > 69 D2 +1ECA > 49 F2 +1ECB > 69 F2 +1ECC > 4F F2 +1ECD > 6F F2 +1ECE > 4F D2 +1ECF > 6F D2 +1ED0 > D4 EC +1ED1 > F4 EC +1ED2 > D4 CC +1ED3 > F4 CC +1ED4 > D4 D2 +1ED5 > F4 D2 +1ED6 > D4 DE +1ED7 > F4 DE +1ED8 > 4F F2 # unsup: 004F 0323 0302 +1ED9 > 6F F2 # unsup: 006F 0323 0302 +1EDA > D5 EC +1EDB > F5 EC +1EDC > D5 CC +1EDD > F5 CC +1EDE > D5 D2 +1EDF > F5 D2 +1EE0 > D5 DE +1EE1 > F5 DE +1EE2 > D5 F2 +1EE3 > F5 F2 +1EE4 > 55 F2 +1EE5 > 75 F2 +1EE6 > 55 D2 +1EE7 > 75 D2 +1EE8 > DD EC +1EE9 > FD EC +1EEA > DD CC +1EEB > FD CC +1EEC > DD D2 +1EED > FD D2 +1EEE > DD DE +1EEF > FD DE +1EF0 > DD F2 +1EF1 > FD F2 +1EF2 > 59 CC +1EF3 > 79 CC +1EF4 > 59 F2 +1EF5 > 79 F2 +1EF6 > 59 D2 +1EF7 > 79 D2 +1EF8 > 59 DE +1EF9 > 79 DE +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 CC +1FEE > A8 EC +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 85 +202F > 20 # compat +2030 > 89 +2039 > 8B +203A > 9B +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AB > FE +20AC > 80 +2122 > 99 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE31 > 97 # compat +FE32 > 96 # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE58 > 97 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 433 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0306 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 3 + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 4 + 0301 > D3 + 0302 > D4 + 0308 > D6 + 031B > D5 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 / + N 5 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + 031B > DD + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0308 > 9F + . +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0306 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 3 + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 4 + 0301 > F3 + 0302 > F4 + 0308 > F6 + 031B > F5 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 / + N 5 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + 031B > FD + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0081 > 81 +008A > 8A +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +009A > 9A +009D > 9D +009E > 9E +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > 41 DE +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > 49 CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > 4F CC +00D3 > D3 +00D4 > D4 +00D5 > 4F DE +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > 59 EC +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > 61 DE +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > 69 CC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > 6F CC +00F3 > F3 +00F4 > F4 +00F5 > 6F DE +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > 79 EC +00FF > FF +0102 > C3 +0103 > E3 +0106 > 43 EC +0107 > 63 EC +0110 > D0 +0111 > F0 +0128 > 49 DE +0129 > 69 DE +0139 > 4C EC +013A > 6C EC +0143 > 4E EC +0144 > 6E EC +0152 > 8C +0153 > 9C +0154 > 52 EC +0155 > 72 EC +015A > 53 EC +015B > 73 EC +0168 > 55 DE +0169 > 75 DE +0178 > 9F +0179 > 5A EC +017A > 7A EC +0192 > 83 +01A0 > D5 +01A1 > F5 +01AF > DD +01B0 > FD +01D7 > DC EC +01D8 > FC EC +01DB > DC CC +01DC > FC CC +01F4 > 47 EC +01F5 > 67 EC +01F8 > 4E CC +01F9 > 6E CC +01FA > C5 EC +01FB > E5 EC +01FC > C6 EC +01FD > E6 EC +01FE > D8 EC +01FF > F8 EC +02C6 > 88 +02DC > 98 +0300 > CC +0301 > EC +0303 > DE +0309 > D2 +0323 > F2 +0340 > CC +0341 > EC +037E > 3B +0385 > A8 EC +0387 > B7 +1E04 > 42 F2 +1E05 > 62 F2 +1E08 > C7 EC +1E09 > E7 EC +1E0C > 44 F2 +1E0D > 64 F2 +1E24 > 48 F2 +1E25 > 68 F2 +1E2E > CF EC +1E2F > EF EC +1E30 > 4B EC +1E31 > 6B EC +1E32 > 4B F2 +1E33 > 6B F2 +1E36 > 4C F2 +1E37 > 6C F2 +1E3E > 4D EC +1E3F > 6D EC +1E42 > 4D F2 +1E43 > 6D F2 +1E46 > 4E F2 +1E47 > 6E F2 +1E4C > 4F DE EC +1E4D > 6F DE EC +1E54 > 50 EC +1E55 > 70 EC +1E5A > 52 F2 +1E5B > 72 F2 +1E62 > 53 F2 +1E63 > 73 F2 +1E6C > 54 F2 +1E6D > 74 F2 +1E78 > 55 DE EC +1E79 > 75 DE EC +1E7C > 56 DE +1E7D > 76 DE +1E7E > 56 F2 +1E7F > 76 F2 +1E80 > 57 CC +1E81 > 77 CC +1E82 > 57 EC +1E83 > 77 EC +1E88 > 57 F2 +1E89 > 77 F2 +1E92 > 5A F2 +1E93 > 7A F2 +1EA0 > 41 F2 +1EA1 > 61 F2 +1EA2 > 41 D2 +1EA3 > 61 D2 +1EA4 > C2 EC +1EA5 > E2 EC +1EA6 > C2 CC +1EA7 > E2 CC +1EA8 > C2 D2 +1EA9 > E2 D2 +1EAA > C2 DE +1EAB > E2 DE +1EAE > C3 EC +1EAF > E3 EC +1EB0 > C3 CC +1EB1 > E3 CC +1EB2 > C3 D2 +1EB3 > E3 D2 +1EB4 > C3 DE +1EB5 > E3 DE +1EB8 > 45 F2 +1EB9 > 65 F2 +1EBA > 45 D2 +1EBB > 65 D2 +1EBC > 45 DE +1EBD > 65 DE +1EBE > CA EC +1EBF > EA EC +1EC0 > CA CC +1EC1 > EA CC +1EC2 > CA D2 +1EC3 > EA D2 +1EC4 > CA DE +1EC5 > EA DE +1EC8 > 49 D2 +1EC9 > 69 D2 +1ECA > 49 F2 +1ECB > 69 F2 +1ECC > 4F F2 +1ECD > 6F F2 +1ECE > 4F D2 +1ECF > 6F D2 +1ED0 > D4 EC +1ED1 > F4 EC +1ED2 > D4 CC +1ED3 > F4 CC +1ED4 > D4 D2 +1ED5 > F4 D2 +1ED6 > D4 DE +1ED7 > F4 DE +1EDA > D5 EC +1EDB > F5 EC +1EDC > D5 CC +1EDD > F5 CC +1EDE > D5 D2 +1EDF > F5 D2 +1EE0 > D5 DE +1EE1 > F5 DE +1EE2 > D5 F2 +1EE3 > F5 F2 +1EE4 > 55 F2 +1EE5 > 75 F2 +1EE6 > 55 D2 +1EE7 > 75 D2 +1EE8 > DD EC +1EE9 > FD EC +1EEA > DD CC +1EEB > FD CC +1EEC > DD D2 +1EED > FD D2 +1EEE > DD DE +1EEF > FD DE +1EF0 > DD F2 +1EF1 > FD F2 +1EF2 > 59 CC +1EF3 > 79 CC +1EF4 > 59 F2 +1EF5 > 79 F2 +1EF6 > 59 D2 +1EF7 > 79 D2 +1EF8 > 59 DE +1EF9 > 79 DE +1FED > A8 CC +1FEE > A8 EC +1FEF > 60 +1FFD > B4 +2013 > 96 +2014 > 97 +2018 > 91 +2019 > 92 +201A > 82 +201C > 93 +201D > 94 +201E > 84 +2020 > 86 +2021 > 87 +2022 > 95 +2026 > 85 +2030 > 89 +2039 > 8B +203A > 9B +20AB > FE +20AC > 80 +2122 > 99 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 008A +8B > 2039 +8C > 0152 +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 009A +9B > 203A +9C > 0153 +9D > 009D +9E > 009E +9F > 0059 0308 +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0306 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 0110 +D1 > 004E 0303 +D2 > 0309 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 031B +D6 > 004F 0308 +D7 > 00D7 +D8 > 00D8 +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0055 031B +DE > 0303 +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0306 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0301 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 0111 +F1 > 006E 0303 +F2 > 0323 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 031B +F6 > 006F 0308 +F7 > 00F7 +F8 > 00F8 +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0075 031B +FE > 20AB +FF > 0079 0308 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 / + N 3 + D2 > 1EA2 + DE > 00C3 + F2 > 1EA0 + . +42 > 0042 / + N 1 + F2 > 1E04 + . +43 > 0043 / + N 1 + EC > 0106 + . +44 > 0044 / + N 1 + F2 > 1E0C + . +45 > 0045 / + N 3 + D2 > 1EBA + DE > 1EBC + F2 > 1EB8 + . +46 > 0046 +47 > 0047 / + N 1 + EC > 01F4 + . +48 > 0048 / + N 1 + F2 > 1E24 + . +49 > 0049 / + N 4 + CC > 00CC + D2 > 1EC8 + DE > 0128 + F2 > 1ECA + . +4A > 004A +4B > 004B / + N 2 + EC > 1E30 + F2 > 1E32 + . +4C > 004C / + N 2 + EC > 0139 + F2 > 1E36 + . +4D > 004D / + N 2 + EC > 1E3E + F2 > 1E42 + . +4E > 004E / + N 3 + CC > 01F8 + EC > 0143 + F2 > 1E46 + . +4F > 004F / + N 4 + CC > 00D2 + D2 > 1ECE + DE > 00D5 / + N 1 + EC > 1E4C + . + F2 > 1ECC + . +50 > 0050 / + N 1 + EC > 1E54 + . +51 > 0051 +52 > 0052 / + N 2 + EC > 0154 + F2 > 1E5A + . +53 > 0053 / + N 2 + EC > 015A + F2 > 1E62 + . +54 > 0054 / + N 1 + F2 > 1E6C + . +55 > 0055 / + N 3 + D2 > 1EE6 + DE > 0168 / + N 1 + EC > 1E78 + . + F2 > 1EE4 + . +56 > 0056 / + N 2 + DE > 1E7C + F2 > 1E7E + . +57 > 0057 / + N 3 + CC > 1E80 + EC > 1E82 + F2 > 1E88 + . +58 > 0058 +59 > 0059 / + N 5 + CC > 1EF2 + D2 > 1EF6 + DE > 1EF8 + EC > 00DD + F2 > 1EF4 + . +5A > 005A / + N 2 + EC > 0179 + F2 > 1E92 + . +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 / + N 3 + D2 > 1EA3 + DE > 00E3 + F2 > 1EA1 + . +62 > 0062 / + N 1 + F2 > 1E05 + . +63 > 0063 / + N 1 + EC > 0107 + . +64 > 0064 / + N 1 + F2 > 1E0D + . +65 > 0065 / + N 3 + D2 > 1EBB + DE > 1EBD + F2 > 1EB9 + . +66 > 0066 +67 > 0067 / + N 1 + EC > 01F5 + . +68 > 0068 / + N 1 + F2 > 1E25 + . +69 > 0069 / + N 4 + CC > 00EC + D2 > 1EC9 + DE > 0129 + F2 > 1ECB + . +6A > 006A +6B > 006B / + N 2 + EC > 1E31 + F2 > 1E33 + . +6C > 006C / + N 2 + EC > 013A + F2 > 1E37 + . +6D > 006D / + N 2 + EC > 1E3F + F2 > 1E43 + . +6E > 006E / + N 3 + CC > 01F9 + EC > 0144 + F2 > 1E47 + . +6F > 006F / + N 4 + CC > 00F2 + D2 > 1ECF + DE > 00F5 / + N 1 + EC > 1E4D + . + F2 > 1ECD + . +70 > 0070 / + N 1 + EC > 1E55 + . +71 > 0071 +72 > 0072 / + N 2 + EC > 0155 + F2 > 1E5B + . +73 > 0073 / + N 2 + EC > 015B + F2 > 1E63 + . +74 > 0074 / + N 1 + F2 > 1E6D + . +75 > 0075 / + N 3 + D2 > 1EE7 + DE > 0169 / + N 1 + EC > 1E79 + . + F2 > 1EE5 + . +76 > 0076 / + N 2 + DE > 1E7D + F2 > 1E7F + . +77 > 0077 / + N 3 + CC > 1E81 + EC > 1E83 + F2 > 1E89 + . +78 > 0078 +79 > 0079 / + N 5 + CC > 1EF3 + D2 > 1EF7 + DE > 1EF9 + EC > 00FD + F2 > 1EF5 + . +7A > 007A / + N 2 + EC > 017A + F2 > 1E93 + . +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 20AC +81 > 0081 +82 > 201A +83 > 0192 +84 > 201E +85 > 2026 +86 > 2020 +87 > 2021 +88 > 02C6 +89 > 2030 +8A > 008A +8B > 2039 +8C > 0152 +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 2018 +92 > 2019 +93 > 201C +94 > 201D +95 > 2022 +96 > 2013 +97 > 2014 +98 > 02DC +99 > 2122 +9A > 009A +9B > 203A +9C > 0153 +9D > 009D +9E > 009E +9F > 0178 +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 / + N 2 + CC > 1FED + EC > 0385 + . +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 / + N 4 + CC > 1EA6 + D2 > 1EA8 + DE > 1EAA + EC > 1EA4 + . +C3 > 0102 / + N 4 + CC > 1EB0 + D2 > 1EB2 + DE > 1EB4 + EC > 1EAE + . +C4 > 00C4 +C5 > 00C5 / + N 1 + EC > 01FA + . +C6 > 00C6 / + N 1 + EC > 01FC + . +C7 > 00C7 / + N 1 + EC > 1E08 + . +C8 > 00C8 +C9 > 00C9 +CA > 00CA / + N 4 + CC > 1EC0 + D2 > 1EC2 + DE > 1EC4 + EC > 1EBE + . +CB > 00CB +CC > 0300 +CD > 00CD +CE > 00CE +CF > 00CF / + N 1 + EC > 1E2E + . +D0 > 0110 +D1 > 00D1 +D2 > 0309 +D3 > 00D3 +D4 > 00D4 / + N 4 + CC > 1ED2 + D2 > 1ED4 + DE > 1ED6 + EC > 1ED0 + . +D5 > 01A0 / + N 5 + CC > 1EDC + D2 > 1EDE + DE > 1EE0 + EC > 1EDA + F2 > 1EE2 + . +D6 > 00D6 +D7 > 00D7 +D8 > 00D8 / + N 1 + EC > 01FE + . +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC / + N 2 + CC > 01DB + EC > 01D7 + . +DD > 01AF / + N 5 + CC > 1EEA + D2 > 1EEC + DE > 1EEE + EC > 1EE8 + F2 > 1EF0 + . +DE > 0303 +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 / + N 4 + CC > 1EA7 + D2 > 1EA9 + DE > 1EAB + EC > 1EA5 + . +E3 > 0103 / + N 4 + CC > 1EB1 + D2 > 1EB3 + DE > 1EB5 + EC > 1EAF + . +E4 > 00E4 +E5 > 00E5 / + N 1 + EC > 01FB + . +E6 > 00E6 / + N 1 + EC > 01FD + . +E7 > 00E7 / + N 1 + EC > 1E09 + . +E8 > 00E8 +E9 > 00E9 +EA > 00EA / + N 4 + CC > 1EC1 + D2 > 1EC3 + DE > 1EC5 + EC > 1EBF + . +EB > 00EB +EC > 0301 +ED > 00ED +EE > 00EE +EF > 00EF / + N 1 + EC > 1E2F + . +F0 > 0111 +F1 > 00F1 +F2 > 0323 +F3 > 00F3 +F4 > 00F4 / + N 4 + CC > 1ED3 + D2 > 1ED5 + DE > 1ED7 + EC > 1ED1 + . +F5 > 01A1 / + N 5 + CC > 1EDD + D2 > 1EDF + DE > 1EE1 + EC > 1EDB + F2 > 1EE3 + . +F6 > 00F6 +F7 > 00F7 +F8 > 00F8 / + N 1 + EC > 01FF + . +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC / + N 2 + CC > 01DC + EC > 01D8 + . +FD > 01B0 / + N 5 + CC > 1EEB + D2 > 1EED + DE > 1EEF + EC > 1EE9 + F2 > 1EF1 + . +FE > 20AB +FF > 00FF +. + +COMP += NFC +. diff --git a/assets/data/cp1258.cset b/assets/data/cp1258.cset new file mode 100644 index 0000000..cb93de8 --- /dev/null +++ b/assets/data/cp1258.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += cp1258 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 20AC - Y 80 80 80 00 00 00 # EURO SIGN +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 201A - Y 82 82 82 00 00 00 # SINGLE LOW-9 QUOTATION MARK +83 0192 L Y 83 83 83 83 83 83 # LATIN SMALL LETTER F WITH HOOK +84 201E - Y 84 84 84 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +85 2026 - Y 85 85 85 00 00 00 # HORIZONTAL ELLIPSIS +86 2020 - Y 86 86 86 00 00 00 # DAGGER +87 2021 - Y 87 87 87 00 00 00 # DOUBLE DAGGER +88 02C6 M Y 88 88 88 00 00 00 # MODIFIER LETTER CIRCUMFLEX ACCENT +89 2030 - Y 89 89 89 00 00 00 # PER MILLE SIGN +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 2039 - Y 8B 8B 8B 00 00 00 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +8C 0152 L Y 8C 9C 8C 8C 2A 00 # LATIN CAPITAL LIGATURE OE +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 2018 - Y 91 91 91 00 00 00 # LEFT SINGLE QUOTATION MARK +92 2019 - Y 92 92 92 00 00 00 # RIGHT SINGLE QUOTATION MARK +93 201C - Y 93 93 93 00 00 00 # LEFT DOUBLE QUOTATION MARK +94 201D - Y 94 94 94 00 00 00 # RIGHT DOUBLE QUOTATION MARK +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 2013 - Y 96 96 96 00 00 00 # EN DASH +97 2014 - Y 97 97 97 00 00 00 # EM DASH +98 02DC - Y 98 98 98 00 00 00 # SMALL TILDE +99 2122 . N 99 99 99 00 00 00 # <unused special> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 203A - Y 9B 9B 9B 00 00 00 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +9C 0153 L Y 8C 9C 8C 9C 2A 00 # LATIN SMALL LIGATURE OE +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 0178 L Y 9F FF 9F 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 0102 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH BREVE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 0300 M M CC CC CC 00 00 00 # COMBINING GRAVE ACCENT +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE +D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE +D2 0309 M M D2 D2 D2 00 00 00 # COMBINING HOOK ABOVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 01A0 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH HORN +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 01AF L Y DD FD DD 55 2A 00 # LATIN CAPITAL LETTER U WITH HORN +DE 0303 M M DE DE DE 00 00 00 # COMBINING TILDE +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 0103 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH BREVE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 0301 M M EC EC EC 00 00 00 # COMBINING ACUTE ACCENT +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE +F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE +F2 0323 M M F2 F2 F2 00 00 00 # COMBINING DOT BELOW +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 01A1 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH HORN +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 01B0 L Y DD FD DD 75 2A 00 # LATIN SMALL LETTER U WITH HORN +FE 20AB - Y FE FE FE 00 00 00 # DONG SIGN +FF 00FF L Y 9F FF 9F 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/assets/data/dvorak.kbd b/assets/data/dvorak.kbd new file mode 100644 index 0000000..c2707d0 --- /dev/null +++ b/assets/data/dvorak.kbd @@ -0,0 +1,25 @@ +# Dvorak keyboard data file + +py +yf +fg +gc +cr +rl +ao +oe +eu +ui +id +dh +ht +tn +ns +qj +jk +kx +xb +bm +mw +wv +vz diff --git a/assets/data/iso-8859-1.cmap b/assets/data/iso-8859-1.cmap new file mode 100644 index 0000000..ed87552 --- /dev/null +++ b/assets/data/iso-8859-1.cmap @@ -0,0 +1,1922 @@ +INTERNAL +/ +N 957 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0301 > DD + . +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 2 + 0301 > FD + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D0 > D0 +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DE > DE +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F0 > F0 +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FE > FE +00FF > FF +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +01FE > D8 # unsup: 00D8 0301 +01FF > F8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > CA # unsup: 00CA 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > CA # unsup: 00CA 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > CA # unsup: 00CA 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > CA # unsup: 00CA 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 260 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0301 > DD + . +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 2 + 0301 > FD + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D0 > D0 +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DE > DE +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F0 > F0 +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FE > FE +00FF > FF +037E > 3B +0387 > B7 +1FEF > 60 +1FFD > B4 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0303 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0049 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 00D0 +D1 > 004E 0303 +D2 > 004F 0300 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 00D7 +D8 > 00D8 +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0059 0301 +DE > 00DE +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0303 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0069 0300 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 00F0 +F1 > 006E 0303 +F2 > 006F 0300 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 00F7 +F8 > 00F8 +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0079 0301 +FE > 00FE +FF > 0079 0308 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 +C3 > 00C3 +C4 > 00C4 +C5 > 00C5 +C6 > 00C6 +C7 > 00C7 +C8 > 00C8 +C9 > 00C9 +CA > 00CA +CB > 00CB +CC > 00CC +CD > 00CD +CE > 00CE +CF > 00CF +D0 > 00D0 +D1 > 00D1 +D2 > 00D2 +D3 > 00D3 +D4 > 00D4 +D5 > 00D5 +D6 > 00D6 +D7 > 00D7 +D8 > 00D8 +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 00DD +DE > 00DE +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 +E3 > 00E3 +E4 > 00E4 +E5 > 00E5 +E6 > 00E6 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 00EC +ED > 00ED +EE > 00EE +EF > 00EF +F0 > 00F0 +F1 > 00F1 +F2 > 00F2 +F3 > 00F3 +F4 > 00F4 +F5 > 00F5 +F6 > 00F6 +F7 > 00F7 +F8 > 00F8 +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 00FD +FE > 00FE +FF > 00FF +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-1.cset b/assets/data/iso-8859-1.cset new file mode 100644 index 0000000..6526987 --- /dev/null +++ b/assets/data/iso-8859-1.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-1 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 00D0 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER ETH +D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE +D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE +DE 00DE L Y DE FE DE DE FE FE # LATIN CAPITAL LETTER THORN +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 00F0 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER ETH +F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE +F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE +FE 00FE L Y DE FE DE FE FE FE # LATIN SMALL LETTER THORN +FF 00FF L Y FF FF FF 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/assets/data/iso-8859-10.cmap b/assets/data/iso-8859-10.cmap new file mode 100644 index 0000000..b3e2364 --- /dev/null +++ b/assets/data/iso-8859-10.cmap @@ -0,0 +1,1971 @@ +INTERNAL +/ +N 925 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 7 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0304 > C0 + 0308 > C4 + 030A > C5 + 0328 > A1 + . +0042 > 42 +0043 > 43 / + N 1 + 030C > C8 + . +0044 > 44 +0045 > 45 / + N 5 + 0301 > C9 + 0304 > A2 + 0307 > CC + 0308 > CB + 0328 > CA + . +0046 > 46 +0047 > 47 / + N 1 + 0327 > A3 + . +0048 > 48 +0049 > 49 / + N 6 + 0301 > CD + 0302 > CE + 0303 > A5 + 0304 > A4 + 0308 > CF + 0328 > C7 + . +004A > 4A +004B > 4B / + N 1 + 0327 > A6 + . +004C > 4C / + N 1 + 0327 > A8 + . +004D > 4D +004E > 4E / + N 1 + 0327 > D1 + . +004F > 4F / + N 5 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0304 > D2 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 030C > AA + . +0054 > 54 +0055 > 55 / + N 6 + 0301 > DA + 0302 > DB + 0303 > D7 + 0304 > AE + 0308 > DC + 0328 > D9 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0301 > DD + . +005A > 5A / + N 1 + 030C > AC + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 7 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0304 > E0 + 0308 > E4 + 030A > E5 + 0328 > B1 + . +0062 > 62 +0063 > 63 / + N 1 + 030C > E8 + . +0064 > 64 +0065 > 65 / + N 5 + 0301 > E9 + 0304 > B2 + 0307 > EC + 0308 > EB + 0328 > EA + . +0066 > 66 +0067 > 67 / + N 1 + 0327 > B3 + . +0068 > 68 +0069 > 69 / + N 6 + 0301 > ED + 0302 > EE + 0303 > B5 + 0304 > B4 + 0308 > EF + 0328 > E7 + . +006A > 6A +006B > 6B / + N 1 + 0327 > B6 + . +006C > 6C / + N 1 + 0327 > B8 + . +006D > 6D +006E > 6E / + N 1 + 0327 > F1 + . +006F > 6F / + N 5 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0304 > F2 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 030C > BA + . +0074 > 74 +0075 > 75 / + N 6 + 0301 > FA + 0302 > FB + 0303 > F7 + 0304 > BE + 0308 > FC + 0328 > F9 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0301 > FD + . +007A > 7A / + N 1 + 030C > BC + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A7 > A7 +00AD > AD +00B0 > B0 +00B7 > B7 +00C0 > 41 # unsup: 0041 0300 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > C9 +00CA > 45 # unsup: 0045 0302 +00CB > CB +00CC > 49 # unsup: 0049 0300 +00CD > CD +00CE > CE +00CF > CF +00D0 > D0 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D8 > D8 +00D9 > 55 # unsup: 0055 0300 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DE > DE +00DF > DF +00E0 > 61 # unsup: 0061 0300 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > E9 +00EA > 65 # unsup: 0065 0302 +00EB > EB +00EC > 69 # unsup: 0069 0300 +00ED > ED +00EE > EE +00EF > EF +00F0 > F0 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F8 > F8 +00F9 > 75 # unsup: 0075 0300 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FE > FE +00FF > 79 # unsup: 0079 0308 +0100 > C0 +0101 > E0 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > A1 +0105 > B1 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > C8 +010D > E8 +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0110 > A9 +0111 > B9 +0112 > A2 +0113 > B2 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > CC +0117 > EC +0118 > CA +0119 > EA +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > A3 +0123 > B3 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > A5 +0129 > B5 +012A > A4 +012B > B4 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > C7 +012F > E7 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > A6 +0137 > B6 +0138 > FF +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > A8 +013C > B8 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > D1 +0146 > F1 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014A > AF +014B > BF +014C > D2 +014D > F2 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > AA +0161 > BA +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0166 > AB +0167 > BB +0168 > D7 +0169 > F7 +016A > AE +016B > BE +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > D9 +0173 > F9 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > AC +017E > BC +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 AC # compat +01C5 > 44 BC # compat +01C6 > 64 BC # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +01FE > D8 # unsup: 00D8 0301 +01FF > F8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > A2 # unsup: 0112 0300 +1E15 > B2 # unsup: 0113 0300 +1E16 > A2 # unsup: 0112 0301 +1E17 > B2 # unsup: 0113 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > D2 # unsup: 014C 0300 +1E51 > F2 # unsup: 014D 0300 +1E52 > D2 # unsup: 014C 0301 +1E53 > F2 # unsup: 014D 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > AA # unsup: 0160 0307 +1E67 > BA # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > D7 # unsup: 0168 0301 +1E79 > F7 # unsup: 0169 0301 +1E7A > AE # unsup: 016A 0308 +1E7B > BE # unsup: 016B 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2015 > BD +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 7 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0304 > C0 + 0308 > C4 + 030A > C5 + 0328 > A1 + . +0042 > 42 +0043 > 43 / + N 1 + 030C > C8 + . +0044 > 44 +0045 > 45 / + N 5 + 0301 > C9 + 0304 > A2 + 0307 > CC + 0308 > CB + 0328 > CA + . +0046 > 46 +0047 > 47 / + N 1 + 0327 > A3 + . +0048 > 48 +0049 > 49 / + N 6 + 0301 > CD + 0302 > CE + 0303 > A5 + 0304 > A4 + 0308 > CF + 0328 > C7 + . +004A > 4A +004B > 4B / + N 1 + 0327 > A6 + . +004C > 4C / + N 1 + 0327 > A8 + . +004D > 4D +004E > 4E / + N 1 + 0327 > D1 + . +004F > 4F / + N 5 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0304 > D2 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 030C > AA + . +0054 > 54 +0055 > 55 / + N 6 + 0301 > DA + 0302 > DB + 0303 > D7 + 0304 > AE + 0308 > DC + 0328 > D9 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0301 > DD + . +005A > 5A / + N 1 + 030C > AC + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 7 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0304 > E0 + 0308 > E4 + 030A > E5 + 0328 > B1 + . +0062 > 62 +0063 > 63 / + N 1 + 030C > E8 + . +0064 > 64 +0065 > 65 / + N 5 + 0301 > E9 + 0304 > B2 + 0307 > EC + 0308 > EB + 0328 > EA + . +0066 > 66 +0067 > 67 / + N 1 + 0327 > B3 + . +0068 > 68 +0069 > 69 / + N 6 + 0301 > ED + 0302 > EE + 0303 > B5 + 0304 > B4 + 0308 > EF + 0328 > E7 + . +006A > 6A +006B > 6B / + N 1 + 0327 > B6 + . +006C > 6C / + N 1 + 0327 > B8 + . +006D > 6D +006E > 6E / + N 1 + 0327 > F1 + . +006F > 6F / + N 5 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0304 > F2 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 030C > BA + . +0074 > 74 +0075 > 75 / + N 6 + 0301 > FA + 0302 > FB + 0303 > F7 + 0304 > BE + 0308 > FC + 0328 > F9 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0301 > FD + . +007A > 7A / + N 1 + 030C > BC + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A7 > A7 +00AD > AD +00B0 > B0 +00B7 > B7 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C9 > C9 +00CB > CB +00CD > CD +00CE > CE +00CF > CF +00D0 > D0 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D8 > D8 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DE > DE +00DF > DF +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E9 > E9 +00EB > EB +00ED > ED +00EE > EE +00EF > EF +00F0 > F0 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F8 > F8 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FE > FE +0100 > C0 +0101 > E0 +0104 > A1 +0105 > B1 +010C > C8 +010D > E8 +0110 > A9 +0111 > B9 +0112 > A2 +0113 > B2 +0116 > CC +0117 > EC +0118 > CA +0119 > EA +0122 > A3 +0123 > B3 +0128 > A5 +0129 > B5 +012A > A4 +012B > B4 +012E > C7 +012F > E7 +0136 > A6 +0137 > B6 +0138 > FF +013B > A8 +013C > B8 +0145 > D1 +0146 > F1 +014A > AF +014B > BF +014C > D2 +014D > F2 +0160 > AA +0161 > BA +0166 > AB +0167 > BB +0168 > D7 +0169 > F7 +016A > AE +016B > BE +0172 > D9 +0173 > F9 +017D > AC +017E > BC +037E > 3B +0387 > B7 +1FEF > 60 +2015 > BD +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0041 0328 +A2 > 0045 0304 +A3 > 0047 0327 +A4 > 0049 0304 +A5 > 0049 0303 +A6 > 004B 0327 +A7 > 00A7 +A8 > 004C 0327 +A9 > 0110 +AA > 0053 030C +AB > 0166 +AC > 005A 030C +AD > 00AD +AE > 0055 0304 +AF > 014A +B0 > 00B0 +B1 > 0061 0328 +B2 > 0065 0304 +B3 > 0067 0327 +B4 > 0069 0304 +B5 > 0069 0303 +B6 > 006B 0327 +B7 > 00B7 +B8 > 006C 0327 +B9 > 0111 +BA > 0073 030C +BB > 0167 +BC > 007A 030C +BD > 2015 +BE > 0075 0304 +BF > 014B +C0 > 0041 0304 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0303 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0049 0328 +C8 > 0043 030C +C9 > 0045 0301 +CA > 0045 0328 +CB > 0045 0308 +CC > 0045 0307 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 00D0 +D1 > 004E 0327 +D2 > 004F 0304 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 0055 0303 +D8 > 00D8 +D9 > 0055 0328 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0059 0301 +DE > 00DE +DF > 00DF +E0 > 0061 0304 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0303 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0069 0328 +E8 > 0063 030C +E9 > 0065 0301 +EA > 0065 0328 +EB > 0065 0308 +EC > 0065 0307 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 00F0 +F1 > 006E 0327 +F2 > 006F 0304 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 0075 0303 +F8 > 00F8 +F9 > 0075 0328 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0079 0301 +FE > 00FE +FF > 0138 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0104 +A2 > 0112 +A3 > 0122 +A4 > 012A +A5 > 0128 +A6 > 0136 +A7 > 00A7 +A8 > 013B +A9 > 0110 +AA > 0160 +AB > 0166 +AC > 017D +AD > 00AD +AE > 016A +AF > 014A +B0 > 00B0 +B1 > 0105 +B2 > 0113 +B3 > 0123 +B4 > 012B +B5 > 0129 +B6 > 0137 +B7 > 00B7 +B8 > 013C +B9 > 0111 +BA > 0161 +BB > 0167 +BC > 017E +BD > 2015 +BE > 016B +BF > 014B +C0 > 0100 +C1 > 00C1 +C2 > 00C2 +C3 > 00C3 +C4 > 00C4 +C5 > 00C5 +C6 > 00C6 +C7 > 012E +C8 > 010C +C9 > 00C9 +CA > 0118 +CB > 00CB +CC > 0116 +CD > 00CD +CE > 00CE +CF > 00CF +D0 > 00D0 +D1 > 0145 +D2 > 014C +D3 > 00D3 +D4 > 00D4 +D5 > 00D5 +D6 > 00D6 +D7 > 0168 +D8 > 00D8 +D9 > 0172 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 00DD +DE > 00DE +DF > 00DF +E0 > 0101 +E1 > 00E1 +E2 > 00E2 +E3 > 00E3 +E4 > 00E4 +E5 > 00E5 +E6 > 00E6 +E7 > 012F +E8 > 010D +E9 > 00E9 +EA > 0119 +EB > 00EB +EC > 0117 +ED > 00ED +EE > 00EE +EF > 00EF +F0 > 00F0 +F1 > 0146 +F2 > 014D +F3 > 00F3 +F4 > 00F4 +F5 > 00F5 +F6 > 00F6 +F7 > 0169 +F8 > 00F8 +F9 > 0173 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 00FD +FE > 00FE +FF > 0138 +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-10.cset b/assets/data/iso-8859-10.cset new file mode 100644 index 0000000..20bebb8 --- /dev/null +++ b/assets/data/iso-8859-10.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-10 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 0104 L Y A1 B1 A1 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK +A2 0112 L Y A2 B2 A2 45 2A 00 # LATIN CAPITAL LETTER E WITH MACRON +A3 0122 L Y A3 B3 A3 47 67 67 # LATIN CAPITAL LETTER G WITH CEDILLA +A4 012A L Y A4 B4 A4 49 2A 00 # LATIN CAPITAL LETTER I WITH MACRON +A5 0128 L Y A5 B5 A5 49 2A 00 # LATIN CAPITAL LETTER I WITH TILDE +A6 0136 L Y A6 B6 A6 4B 6B 6B # LATIN CAPITAL LETTER K WITH CEDILLA +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 013B L Y A8 B8 A8 4C 6C 6C # LATIN CAPITAL LETTER L WITH CEDILLA +A9 0110 L Y A9 B9 A9 A9 B9 B9 # LATIN CAPITAL LETTER D WITH STROKE +AA 0160 L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +AB 0166 L Y AB BB AB AB BB BB # LATIN CAPITAL LETTER T WITH STROKE +AC 017D L Y AC BC AC 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 016A L Y AE BE AE 55 2A 00 # LATIN CAPITAL LETTER U WITH MACRON +AF 014A L Y AF BF AF AF BF BF # LATIN CAPITAL LETTER ENG +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 0105 L Y A1 B1 A1 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK +B2 0113 L Y A2 B2 A2 65 2A 00 # LATIN SMALL LETTER E WITH MACRON +B3 0123 L Y A3 B3 A3 67 67 67 # LATIN SMALL LETTER G WITH CEDILLA +B4 012B L Y A4 B4 A4 69 2A 00 # LATIN SMALL LETTER I WITH MACRON +B5 0129 L Y A5 B5 A5 69 2A 00 # LATIN SMALL LETTER I WITH TILDE +B6 0137 L Y A6 B6 A6 6B 6B 6B # LATIN SMALL LETTER K WITH CEDILLA +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 013C L Y A8 B8 A8 6C 6C 6C # LATIN SMALL LETTER L WITH CEDILLA +B9 0111 L Y A9 B9 A9 B9 B9 B9 # LATIN SMALL LETTER D WITH STROKE +BA 0161 L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH CARON +BB 0167 L Y AB BB AB BB BB BB # LATIN SMALL LETTER T WITH STROKE +BC 017E L Y AC BC AC 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +BD 2015 - Y BD BD BD 00 00 00 # HORIZONTAL BAR +BE 016B L Y AE BE AE 75 2A 00 # LATIN SMALL LETTER U WITH MACRON +BF 014B L Y AF BF AF BF BF BF # LATIN SMALL LETTER ENG +C0 0100 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH MACRON +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 012E L Y C7 E7 C7 49 2A 00 # LATIN CAPITAL LETTER I WITH OGONEK +C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 0118 L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 0116 L Y CC EC CC 45 2A 00 # LATIN CAPITAL LETTER E WITH DOT ABOVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 00D0 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER ETH +D1 0145 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH CEDILLA +D2 014C L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH MACRON +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 0168 L Y D7 F7 D7 55 2A 00 # LATIN CAPITAL LETTER U WITH TILDE +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 0172 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH OGONEK +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE +DE 00DE L Y DE FE DE DE FE FE # LATIN CAPITAL LETTER THORN +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 0101 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH MACRON +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 012F L Y C7 E7 C7 69 2A 00 # LATIN SMALL LETTER I WITH OGONEK +E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 0119 L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 0117 L Y CC EC CC 65 2A 00 # LATIN SMALL LETTER E WITH DOT ABOVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 00F0 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER ETH +F1 0146 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH CEDILLA +F2 014D L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH MACRON +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 0169 L Y D7 F7 D7 75 2A 00 # LATIN SMALL LETTER U WITH TILDE +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 0173 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH OGONEK +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE +FE 00FE L Y DE FE DE FE FE FE # LATIN SMALL LETTER THORN +FF 0138 L Y FF FF FF FF FF FF # LATIN SMALL LETTER KRA diff --git a/assets/data/iso-8859-11.cmap b/assets/data/iso-8859-11.cmap new file mode 100644 index 0000000..5a14b8d --- /dev/null +++ b/assets/data/iso-8859-11.cmap @@ -0,0 +1,1508 @@ +INTERNAL +/ +N 988 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0E01 > A1 +0E02 > A2 +0E03 > A3 +0E04 > A4 +0E05 > A5 +0E06 > A6 +0E07 > A7 +0E08 > A8 +0E09 > A9 +0E0A > AA +0E0B > AB +0E0C > AC +0E0D > AD +0E0E > AE +0E0F > AF +0E10 > B0 +0E11 > B1 +0E12 > B2 +0E13 > B3 +0E14 > B4 +0E15 > B5 +0E16 > B6 +0E17 > B7 +0E18 > B8 +0E19 > B9 +0E1A > BA +0E1B > BB +0E1C > BC +0E1D > BD +0E1E > BE +0E1F > BF +0E20 > C0 +0E21 > C1 +0E22 > C2 +0E23 > C3 +0E24 > C4 +0E25 > C5 +0E26 > C6 +0E27 > C7 +0E28 > C8 +0E29 > C9 +0E2A > CA +0E2B > CB +0E2C > CC +0E2D > CD +0E2E > CE +0E2F > CF +0E30 > D0 +0E31 > D1 +0E32 > D2 +0E33 > D3 +0E34 > D4 +0E35 > D5 +0E36 > D6 +0E37 > D7 +0E38 > D8 +0E39 > D9 +0E3A > DA +0E3F > DF +0E40 > E0 +0E41 > E1 +0E42 > E2 +0E43 > E3 +0E44 > E4 +0E45 > E5 +0E46 > E6 +0E47 > E7 +0E48 > E8 +0E49 > E9 +0E4A > EA +0E4B > EB +0E4C > EC +0E4D > ED +0E4E > EE +0E4F > EF +0E50 > F0 +0E51 > F1 +0E52 > F2 +0E53 > F3 +0E54 > F4 +0E55 > F5 +0E56 > F6 +0E57 > F7 +0E58 > F8 +0E59 > F9 +0E5A > FA +0E5B > FB +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +. + +STRICT +/ +N 250 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +037E > 3B +0E01 > A1 +0E02 > A2 +0E03 > A3 +0E04 > A4 +0E05 > A5 +0E06 > A6 +0E07 > A7 +0E08 > A8 +0E09 > A9 +0E0A > AA +0E0B > AB +0E0C > AC +0E0D > AD +0E0E > AE +0E0F > AF +0E10 > B0 +0E11 > B1 +0E12 > B2 +0E13 > B3 +0E14 > B4 +0E15 > B5 +0E16 > B6 +0E17 > B7 +0E18 > B8 +0E19 > B9 +0E1A > BA +0E1B > BB +0E1C > BC +0E1D > BD +0E1E > BE +0E1F > BF +0E20 > C0 +0E21 > C1 +0E22 > C2 +0E23 > C3 +0E24 > C4 +0E25 > C5 +0E26 > C6 +0E27 > C7 +0E28 > C8 +0E29 > C9 +0E2A > CA +0E2B > CB +0E2C > CC +0E2D > CD +0E2E > CE +0E2F > CF +0E30 > D0 +0E31 > D1 +0E32 > D2 +0E33 > D3 +0E34 > D4 +0E35 > D5 +0E36 > D6 +0E37 > D7 +0E38 > D8 +0E39 > D9 +0E3A > DA +0E3F > DF +0E40 > E0 +0E41 > E1 +0E42 > E2 +0E43 > E3 +0E44 > E4 +0E45 > E5 +0E46 > E6 +0E47 > E7 +0E48 > E8 +0E49 > E9 +0E4A > EA +0E4B > EB +0E4C > EC +0E4D > ED +0E4E > EE +0E4F > EF +0E50 > F0 +0E51 > F1 +0E52 > F2 +0E53 > F3 +0E54 > F4 +0E55 > F5 +0E56 > F6 +0E57 > F7 +0E58 > F8 +0E59 > F9 +0E5A > FA +0E5B > FB +1FEF > 60 +. + +NFD +/ +N 248 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0E01 +A2 > 0E02 +A3 > 0E03 +A4 > 0E04 +A5 > 0E05 +A6 > 0E06 +A7 > 0E07 +A8 > 0E08 +A9 > 0E09 +AA > 0E0A +AB > 0E0B +AC > 0E0C +AD > 0E0D +AE > 0E0E +AF > 0E0F +B0 > 0E10 +B1 > 0E11 +B2 > 0E12 +B3 > 0E13 +B4 > 0E14 +B5 > 0E15 +B6 > 0E16 +B7 > 0E17 +B8 > 0E18 +B9 > 0E19 +BA > 0E1A +BB > 0E1B +BC > 0E1C +BD > 0E1D +BE > 0E1E +BF > 0E1F +C0 > 0E20 +C1 > 0E21 +C2 > 0E22 +C3 > 0E23 +C4 > 0E24 +C5 > 0E25 +C6 > 0E26 +C7 > 0E27 +C8 > 0E28 +C9 > 0E29 +CA > 0E2A +CB > 0E2B +CC > 0E2C +CD > 0E2D +CE > 0E2E +CF > 0E2F +D0 > 0E30 +D1 > 0E31 +D2 > 0E32 +D3 > 0E33 +D4 > 0E34 +D5 > 0E35 +D6 > 0E36 +D7 > 0E37 +D8 > 0E38 +D9 > 0E39 +DA > 0E3A +DF > 0E3F +E0 > 0E40 +E1 > 0E41 +E2 > 0E42 +E3 > 0E43 +E4 > 0E44 +E5 > 0E45 +E6 > 0E46 +E7 > 0E47 +E8 > 0E48 +E9 > 0E49 +EA > 0E4A +EB > 0E4B +EC > 0E4C +ED > 0E4D +EE > 0E4E +EF > 0E4F +F0 > 0E50 +F1 > 0E51 +F2 > 0E52 +F3 > 0E53 +F4 > 0E54 +F5 > 0E55 +F6 > 0E56 +F7 > 0E57 +F8 > 0E58 +F9 > 0E59 +FA > 0E5A +FB > 0E5B +. + +NFC += NFD +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-11.cset b/assets/data/iso-8859-11.cset new file mode 100644 index 0000000..75a2702 --- /dev/null +++ b/assets/data/iso-8859-11.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-11 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 0E01 l Y A1 A1 A1 A1 A1 A1 # THAI CHARACTER KO KAI +A2 0E02 l Y A2 A2 A2 A2 A2 A2 # THAI CHARACTER KHO KHAI +A3 0E03 l Y A3 A3 A3 A3 A3 A3 # THAI CHARACTER KHO KHUAT +A4 0E04 l Y A4 A4 A4 A4 A4 A4 # THAI CHARACTER KHO KHWAI +A5 0E05 l Y A5 A5 A5 A5 A5 A5 # THAI CHARACTER KHO KHON +A6 0E06 l Y A6 A6 A6 A6 A6 A6 # THAI CHARACTER KHO RAKHANG +A7 0E07 l Y A7 A7 A7 A7 A7 A7 # THAI CHARACTER NGO NGU +A8 0E08 l Y A8 A8 A8 A8 A8 A8 # THAI CHARACTER CHO CHAN +A9 0E09 l Y A9 A9 A9 A9 A9 A9 # THAI CHARACTER CHO CHING +AA 0E0A l Y AA AA AA AA AA AA # THAI CHARACTER CHO CHANG +AB 0E0B l Y AB AB AB AB AB AB # THAI CHARACTER SO SO +AC 0E0C l Y AC AC AC AC AC AC # THAI CHARACTER CHO CHOE +AD 0E0D l Y AD AD AD AD AD AD # THAI CHARACTER YO YING +AE 0E0E l Y AE AE AE AE AE AE # THAI CHARACTER DO CHADA +AF 0E0F l Y AF AF AF AF AF AF # THAI CHARACTER TO PATAK +B0 0E10 l Y B0 B0 B0 B0 B0 B0 # THAI CHARACTER THO THAN +B1 0E11 l Y B1 B1 B1 B1 B1 B1 # THAI CHARACTER THO NANGMONTHO +B2 0E12 l Y B2 B2 B2 B2 B2 B2 # THAI CHARACTER THO PHUTHAO +B3 0E13 l Y B3 B3 B3 B3 B3 B3 # THAI CHARACTER NO NEN +B4 0E14 l Y B4 B4 B4 B4 B4 B4 # THAI CHARACTER DO DEK +B5 0E15 l Y B5 B5 B5 B5 B5 B5 # THAI CHARACTER TO TAO +B6 0E16 l Y B6 B6 B6 B6 B6 B6 # THAI CHARACTER THO THUNG +B7 0E17 l Y B7 B7 B7 B7 B7 B7 # THAI CHARACTER THO THAHAN +B8 0E18 l Y B8 B8 B8 B8 B8 B8 # THAI CHARACTER THO THONG +B9 0E19 l Y B9 B9 B9 B9 B9 B9 # THAI CHARACTER NO NU +BA 0E1A l Y BA BA BA BA BA BA # THAI CHARACTER BO BAIMAI +BB 0E1B l Y BB BB BB BB BB BB # THAI CHARACTER PO PLA +BC 0E1C l Y BC BC BC BC BC BC # THAI CHARACTER PHO PHUNG +BD 0E1D l Y BD BD BD BD BD BD # THAI CHARACTER FO FA +BE 0E1E l Y BE BE BE BE BE BE # THAI CHARACTER PHO PHAN +BF 0E1F l Y BF BF BF BF BF BF # THAI CHARACTER FO FAN +C0 0E20 l Y C0 C0 C0 C0 C0 C0 # THAI CHARACTER PHO SAMPHAO +C1 0E21 l Y C1 C1 C1 C1 C1 C1 # THAI CHARACTER MO MA +C2 0E22 l Y C2 C2 C2 C2 C2 C2 # THAI CHARACTER YO YAK +C3 0E23 l Y C3 C3 C3 C3 C3 C3 # THAI CHARACTER RO RUA +C4 0E24 l Y C4 C4 C4 C4 C4 C4 # THAI CHARACTER RU +C5 0E25 l Y C5 C5 C5 C5 C5 C5 # THAI CHARACTER LO LING +C6 0E26 l Y C6 C6 C6 C6 C6 C6 # THAI CHARACTER LU +C7 0E27 l Y C7 C7 C7 C7 C7 C7 # THAI CHARACTER WO WAEN +C8 0E28 l Y C8 C8 C8 C8 C8 C8 # THAI CHARACTER SO SALA +C9 0E29 l Y C9 C9 C9 C9 C9 C9 # THAI CHARACTER SO RUSI +CA 0E2A l Y CA CA CA CA CA CA # THAI CHARACTER SO SUA +CB 0E2B l Y CB CB CB CB CB CB # THAI CHARACTER HO HIP +CC 0E2C l Y CC CC CC CC CC CC # THAI CHARACTER LO CHULA +CD 0E2D l Y CD CD CD CD CD CD # THAI CHARACTER O ANG +CE 0E2E l Y CE CE CE CE CE CE # THAI CHARACTER HO NOKHUK +CF 0E2F l Y CF CF CF CF CF CF # THAI CHARACTER PAIYANNOI +D0 0E30 l Y D0 D0 D0 D0 D0 D0 # THAI CHARACTER SARA A +D1 0E31 l M D1 D1 D1 D1 D1 D1 # THAI CHARACTER MAI HAN-AKAT +D2 0E32 l Y D2 D2 D2 D2 D2 D2 # THAI CHARACTER SARA AA +D3 0E33 l Y D3 D3 D3 D2 D2 D2 # THAI CHARACTER SARA AM +D4 0E34 l M D4 D4 D4 D4 D4 D4 # THAI CHARACTER SARA I +D5 0E35 l M D5 D5 D5 D5 D5 D5 # THAI CHARACTER SARA II +D6 0E36 l M D6 D6 D6 D6 D6 D6 # THAI CHARACTER SARA UE +D7 0E37 l M D7 D7 D7 D7 D7 D7 # THAI CHARACTER SARA UEE +D8 0E38 l M D8 D8 D8 D8 D8 D8 # THAI CHARACTER SARA U +D9 0E39 l M D9 D9 D9 D9 D9 D9 # THAI CHARACTER SARA UU +DA 0E3A l M DA DA DA DA DA DA # THAI CHARACTER PHINTHU +DB E0DB . N DB DB DB 00 00 00 # <unused> +DC E0DC . N DC DC DC 00 00 00 # <unused> +DD E0DD . N DD DD DD 00 00 00 # <unused> +DE E0DE . N DE DE DE 00 00 00 # <unused> +DF 0E3F - Y DF DF DF 00 00 00 # THAI CURRENCY SYMBOL BAHT +E0 0E40 l Y E0 E0 E0 E0 E0 E0 # THAI CHARACTER SARA E +E1 0E41 l Y E1 E1 E1 E1 E1 E1 # THAI CHARACTER SARA AE +E2 0E42 l Y E2 E2 E2 E2 E2 E2 # THAI CHARACTER SARA O +E3 0E43 l Y E3 E3 E3 E3 E3 E3 # THAI CHARACTER SARA AI MAIMUAN +E4 0E44 l Y E4 E4 E4 E4 E4 E4 # THAI CHARACTER SARA AI MAIMALAI +E5 0E45 l Y E5 E5 E5 E5 E5 E5 # THAI CHARACTER LAKKHANGYAO +E6 0E46 l Y E6 E6 E6 E6 E6 E6 # THAI CHARACTER MAIYAMOK +E7 0E47 M M E7 E7 E7 00 00 00 # THAI CHARACTER MAITAIKHU +E8 0E48 M M E8 E8 E8 00 00 00 # THAI CHARACTER MAI EK +E9 0E49 M M E9 E9 E9 00 00 00 # THAI CHARACTER MAI THO +EA 0E4A M M EA EA EA 00 00 00 # THAI CHARACTER MAI TRI +EB 0E4B M M EB EB EB 00 00 00 # THAI CHARACTER MAI CHATTAWA +EC 0E4C M M EC EC EC 00 00 00 # THAI CHARACTER THANTHAKHAT +ED 0E4D l M ED ED ED ED ED ED # THAI CHARACTER NIKHAHIT +EE 0E4E M M EE EE EE 00 00 00 # THAI CHARACTER YAMAKKAN +EF 0E4F - Y EF EF EF 00 00 00 # THAI CHARACTER FONGMAN +F0 0E50 D Y F0 F0 F0 00 00 00 # THAI DIGIT ZERO +F1 0E51 D Y F1 F1 F1 00 00 00 # THAI DIGIT ONE +F2 0E52 D Y F2 F2 F2 00 00 00 # THAI DIGIT TWO +F3 0E53 D Y F3 F3 F3 00 00 00 # THAI DIGIT THREE +F4 0E54 D Y F4 F4 F4 00 00 00 # THAI DIGIT FOUR +F5 0E55 D Y F5 F5 F5 00 00 00 # THAI DIGIT FIVE +F6 0E56 D Y F6 F6 F6 00 00 00 # THAI DIGIT SIX +F7 0E57 D Y F7 F7 F7 00 00 00 # THAI DIGIT SEVEN +F8 0E58 D Y F8 F8 F8 00 00 00 # THAI DIGIT EIGHT +F9 0E59 D Y F9 F9 F9 00 00 00 # THAI DIGIT NINE +FA 0E5A - Y FA FA FA 00 00 00 # THAI CHARACTER ANGKHANKHU +FB 0E5B - Y FB FB FB 00 00 00 # THAI CHARACTER KHOMUT +FC E0FC . N FC FC FC 00 00 00 # <unused> +FD E0FD . N FD FD FD 00 00 00 # <unused> +FE E0FE . N FE FE FE 00 00 00 # <unused> +FF E0FF . N FF FF FF 00 00 00 # <unused> diff --git a/assets/data/iso-8859-13.cmap b/assets/data/iso-8859-13.cmap new file mode 100644 index 0000000..66e01d4 --- /dev/null +++ b/assets/data/iso-8859-13.cmap @@ -0,0 +1,1961 @@ +INTERNAL +/ +N 943 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 4 + 0304 > C2 + 0308 > C4 + 030A > C5 + 0328 > C0 + . +0042 > 42 +0043 > 43 / + N 2 + 0301 > C3 + 030C > C8 + . +0044 > 44 +0045 > 45 / + N 4 + 0301 > C9 + 0304 > C7 + 0307 > CB + 0328 > C6 + . +0046 > 46 +0047 > 47 / + N 1 + 0327 > CC + . +0048 > 48 +0049 > 49 / + N 2 + 0304 > CE + 0328 > C1 + . +004A > 4A +004B > 4B / + N 1 + 0327 > CD + . +004C > 4C / + N 1 + 0327 > CF + . +004D > 4D +004E > 4E / + N 2 + 0301 > D1 + 0327 > D2 + . +004F > 4F / + N 4 + 0301 > D3 + 0303 > D5 + 0304 > D4 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 1 + 0327 > AA + . +0053 > 53 / + N 2 + 0301 > DA + 030C > D0 + . +0054 > 54 +0055 > 55 / + N 3 + 0304 > DB + 0308 > DC + 0328 > D8 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A / + N 3 + 0301 > CA + 0307 > DD + 030C > DE + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 4 + 0304 > E2 + 0308 > E4 + 030A > E5 + 0328 > E0 + . +0062 > 62 +0063 > 63 / + N 2 + 0301 > E3 + 030C > E8 + . +0064 > 64 +0065 > 65 / + N 4 + 0301 > E9 + 0304 > E7 + 0307 > EB + 0328 > E6 + . +0066 > 66 +0067 > 67 / + N 1 + 0327 > EC + . +0068 > 68 +0069 > 69 / + N 2 + 0304 > EE + 0328 > E1 + . +006A > 6A +006B > 6B / + N 1 + 0327 > ED + . +006C > 6C / + N 1 + 0327 > EF + . +006D > 6D +006E > 6E / + N 2 + 0301 > F1 + 0327 > F2 + . +006F > 6F / + N 4 + 0301 > F3 + 0303 > F5 + 0304 > F4 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 1 + 0327 > BA + . +0073 > 73 / + N 2 + 0301 > FA + 030C > F0 + . +0074 > 74 +0075 > 75 / + N 3 + 0304 > FB + 0308 > FC + 0328 > F8 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A / + N 3 + 0301 > EA + 0307 > FD + 030C > FE + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A6 > A6 +00A7 > A7 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > C4 +00C5 > C5 +00C6 > AF +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > C9 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > D3 +00D4 > 4F # unsup: 004F 0302 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > A8 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > DC +00DD > 59 # unsup: 0059 0301 +00DF > DF +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > E4 +00E5 > E5 +00E6 > BF +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > E9 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > F3 +00F4 > 6F # unsup: 006F 0302 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > B8 +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > FC +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > C2 +0101 > E2 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > C0 +0105 > E0 +0106 > C3 +0107 > E3 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > C8 +010D > E8 +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > C7 +0113 > E7 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > CB +0117 > EB +0118 > C6 +0119 > E6 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > CC +0123 > EC +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > CE +012B > EE +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > C1 +012F > E1 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > CD +0137 > ED +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > CF +013C > EF +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0141 > D9 +0142 > F9 +0143 > D1 +0144 > F1 +0145 > D2 +0146 > F2 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > D4 +014D > F4 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > AA +0157 > BA +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > DA +015B > FA +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > D0 +0161 > F0 +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > DB +016B > FB +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > D8 +0173 > F8 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > CA +017A > EA +017B > DD +017C > FD +017D > DE +017E > FE +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 DE # compat +01C5 > 44 FE # compat +01C6 > 64 FE # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > AF # unsup: 00C6 0304 +01E3 > BF # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > AF # unsup: 00C6 0301 +01FD > BF # unsup: 00E6 0301 +01FE > A8 # unsup: 00D8 0301 +01FF > B8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > C7 # unsup: 0112 0300 +1E15 > E7 # unsup: 0113 0300 +1E16 > C7 # unsup: 0112 0301 +1E17 > E7 # unsup: 0113 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > D4 # unsup: 014C 0300 +1E51 > F4 # unsup: 014D 0300 +1E52 > D4 # unsup: 014C 0301 +1E53 > F4 # unsup: 014D 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > DA # unsup: 015A 0307 +1E65 > FA # unsup: 015B 0307 +1E66 > D0 # unsup: 0160 0307 +1E67 > F0 # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > DB # unsup: 016A 0308 +1E7B > FB # unsup: 016B 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2019 > FF +201C > B4 +201D > A1 +201E > A5 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE4 > A6 # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 4 + 0304 > C2 + 0308 > C4 + 030A > C5 + 0328 > C0 + . +0042 > 42 +0043 > 43 / + N 2 + 0301 > C3 + 030C > C8 + . +0044 > 44 +0045 > 45 / + N 4 + 0301 > C9 + 0304 > C7 + 0307 > CB + 0328 > C6 + . +0046 > 46 +0047 > 47 / + N 1 + 0327 > CC + . +0048 > 48 +0049 > 49 / + N 2 + 0304 > CE + 0328 > C1 + . +004A > 4A +004B > 4B / + N 1 + 0327 > CD + . +004C > 4C / + N 1 + 0327 > CF + . +004D > 4D +004E > 4E / + N 2 + 0301 > D1 + 0327 > D2 + . +004F > 4F / + N 4 + 0301 > D3 + 0303 > D5 + 0304 > D4 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 1 + 0327 > AA + . +0053 > 53 / + N 2 + 0301 > DA + 030C > D0 + . +0054 > 54 +0055 > 55 / + N 3 + 0304 > DB + 0308 > DC + 0328 > D8 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A / + N 3 + 0301 > CA + 0307 > DD + 030C > DE + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 4 + 0304 > E2 + 0308 > E4 + 030A > E5 + 0328 > E0 + . +0062 > 62 +0063 > 63 / + N 2 + 0301 > E3 + 030C > E8 + . +0064 > 64 +0065 > 65 / + N 4 + 0301 > E9 + 0304 > E7 + 0307 > EB + 0328 > E6 + . +0066 > 66 +0067 > 67 / + N 1 + 0327 > EC + . +0068 > 68 +0069 > 69 / + N 2 + 0304 > EE + 0328 > E1 + . +006A > 6A +006B > 6B / + N 1 + 0327 > ED + . +006C > 6C / + N 1 + 0327 > EF + . +006D > 6D +006E > 6E / + N 2 + 0301 > F1 + 0327 > F2 + . +006F > 6F / + N 4 + 0301 > F3 + 0303 > F5 + 0304 > F4 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 1 + 0327 > BA + . +0073 > 73 / + N 2 + 0301 > FA + 030C > F0 + . +0074 > 74 +0075 > 75 / + N 3 + 0304 > FB + 0308 > FC + 0328 > F8 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A / + N 3 + 0301 > EA + 0307 > FD + 030C > FE + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A6 > A6 +00A7 > A7 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00C4 > C4 +00C5 > C5 +00C6 > AF +00C9 > C9 +00D3 > D3 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > A8 +00DC > DC +00DF > DF +00E4 > E4 +00E5 > E5 +00E6 > BF +00E9 > E9 +00F3 > F3 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > B8 +00FC > FC +0100 > C2 +0101 > E2 +0104 > C0 +0105 > E0 +0106 > C3 +0107 > E3 +010C > C8 +010D > E8 +0112 > C7 +0113 > E7 +0116 > CB +0117 > EB +0118 > C6 +0119 > E6 +0122 > CC +0123 > EC +012A > CE +012B > EE +012E > C1 +012F > E1 +0136 > CD +0137 > ED +013B > CF +013C > EF +0141 > D9 +0142 > F9 +0143 > D1 +0144 > F1 +0145 > D2 +0146 > F2 +014C > D4 +014D > F4 +0156 > AA +0157 > BA +015A > DA +015B > FA +0160 > D0 +0161 > F0 +016A > DB +016B > FB +0172 > D8 +0173 > F8 +0179 > CA +017A > EA +017B > DD +017C > FD +017D > DE +017E > FE +037E > 3B +0387 > B7 +1FEF > 60 +2019 > FF +201C > B4 +201D > A1 +201E > A5 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 201D +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 201E +A6 > 00A6 +A7 > 00A7 +A8 > 00D8 +A9 > 00A9 +AA > 0052 0327 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00C6 +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 201C +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00F8 +B9 > 00B9 +BA > 0072 0327 +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00E6 +C0 > 0041 0328 +C1 > 0049 0328 +C2 > 0041 0304 +C3 > 0043 0301 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 0045 0328 +C7 > 0045 0304 +C8 > 0043 030C +C9 > 0045 0301 +CA > 005A 0301 +CB > 0045 0307 +CC > 0047 0327 +CD > 004B 0327 +CE > 0049 0304 +CF > 004C 0327 +D0 > 0053 030C +D1 > 004E 0301 +D2 > 004E 0327 +D3 > 004F 0301 +D4 > 004F 0304 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 00D7 +D8 > 0055 0328 +D9 > 0141 +DA > 0053 0301 +DB > 0055 0304 +DC > 0055 0308 +DD > 005A 0307 +DE > 005A 030C +DF > 00DF +E0 > 0061 0328 +E1 > 0069 0328 +E2 > 0061 0304 +E3 > 0063 0301 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 0065 0328 +E7 > 0065 0304 +E8 > 0063 030C +E9 > 0065 0301 +EA > 007A 0301 +EB > 0065 0307 +EC > 0067 0327 +ED > 006B 0327 +EE > 0069 0304 +EF > 006C 0327 +F0 > 0073 030C +F1 > 006E 0301 +F2 > 006E 0327 +F3 > 006F 0301 +F4 > 006F 0304 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 00F7 +F8 > 0075 0328 +F9 > 0142 +FA > 0073 0301 +FB > 0075 0304 +FC > 0075 0308 +FD > 007A 0307 +FE > 007A 030C +FF > 2019 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 201D +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 201E +A6 > 00A6 +A7 > 00A7 +A8 > 00D8 +A9 > 00A9 +AA > 0156 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00C6 +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 201C +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00F8 +B9 > 00B9 +BA > 0157 +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00E6 +C0 > 0104 +C1 > 012E +C2 > 0100 +C3 > 0106 +C4 > 00C4 +C5 > 00C5 +C6 > 0118 +C7 > 0112 +C8 > 010C +C9 > 00C9 +CA > 0179 +CB > 0116 +CC > 0122 +CD > 0136 +CE > 012A +CF > 013B +D0 > 0160 +D1 > 0143 +D2 > 0145 +D3 > 00D3 +D4 > 014C +D5 > 00D5 +D6 > 00D6 +D7 > 00D7 +D8 > 0172 +D9 > 0141 +DA > 015A +DB > 016A +DC > 00DC +DD > 017B +DE > 017D +DF > 00DF +E0 > 0105 +E1 > 012F +E2 > 0101 +E3 > 0107 +E4 > 00E4 +E5 > 00E5 +E6 > 0119 +E7 > 0113 +E8 > 010D +E9 > 00E9 +EA > 017A +EB > 0117 +EC > 0123 +ED > 0137 +EE > 012B +EF > 013C +F0 > 0161 +F1 > 0144 +F2 > 0146 +F3 > 00F3 +F4 > 014D +F5 > 00F5 +F6 > 00F6 +F7 > 00F7 +F8 > 0173 +F9 > 0142 +FA > 015B +FB > 016B +FC > 00FC +FD > 017C +FE > 017E +FF > 2019 +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-13.cset b/assets/data/iso-8859-13.cset new file mode 100644 index 0000000..512cf60 --- /dev/null +++ b/assets/data/iso-8859-13.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-13 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 201D - Y A1 A1 A1 00 00 00 # RIGHT DOUBLE QUOTATION MARK +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 201E - Y A5 A5 A5 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00D8 L Y A8 B8 A8 A8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 0156 L Y AA BA AA 52 72 72 # LATIN CAPITAL LETTER R WITH CEDILLA +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00C6 L Y AF BF AF AF 2A 00 # LATIN CAPITAL LETTER AE +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 201C - Y B4 B4 B4 00 00 00 # LEFT DOUBLE QUOTATION MARK +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00F8 L Y A8 B8 A8 B8 2A 00 # LATIN SMALL LETTER O WITH STROKE +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 0157 L Y AA BA AA 72 72 72 # LATIN SMALL LETTER R WITH CEDILLA +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 00E6 L Y AF BF AF BF 2A 00 # LATIN SMALL LETTER AE +C0 0104 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK +C1 012E L Y C1 E1 C1 49 2A 00 # LATIN CAPITAL LETTER I WITH OGONEK +C2 0100 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH MACRON +C3 0106 L Y C3 E3 C3 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 0118 L Y C6 E6 C6 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK +C7 0112 L Y C7 E7 C7 45 2A 00 # LATIN CAPITAL LETTER E WITH MACRON +C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 0179 L Y CA EA CA 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE +CB 0116 L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DOT ABOVE +CC 0122 L Y CC EC CC 47 67 67 # LATIN CAPITAL LETTER G WITH CEDILLA +CD 0136 L Y CD ED CD 4B 6B 6B # LATIN CAPITAL LETTER K WITH CEDILLA +CE 012A L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH MACRON +CF 013B L Y CF EF CF 4C 6C 6C # LATIN CAPITAL LETTER L WITH CEDILLA +D0 0160 L Y D0 F0 D0 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE +D2 0145 L Y D2 F2 D2 4E 6E 6E # LATIN CAPITAL LETTER N WITH CEDILLA +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 014C L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH MACRON +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 0172 L Y D8 F8 D8 55 2A 00 # LATIN CAPITAL LETTER U WITH OGONEK +D9 0141 L Y D9 F9 D9 D9 F9 F9 # LATIN CAPITAL LETTER L WITH STROKE +DA 015A L Y DA FA DA 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE +DB 016A L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH MACRON +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 017B L Y DD FD DD 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE +DE 017D L Y DE FE DE 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 0105 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK +E1 012F L Y C1 E1 C1 69 2A 00 # LATIN SMALL LETTER I WITH OGONEK +E2 0101 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH MACRON +E3 0107 L Y C3 E3 C3 63 63 63 # LATIN SMALL LETTER C WITH ACUTE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 0119 L Y C6 E6 C6 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK +E7 0113 L Y C7 E7 C7 65 2A 00 # LATIN SMALL LETTER E WITH MACRON +E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 017A L Y CA EA CA 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE +EB 0117 L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DOT ABOVE +EC 0123 L Y CC EC CC 67 67 67 # LATIN SMALL LETTER G WITH CEDILLA +ED 0137 L Y CD ED CD 6B 6B 6B # LATIN SMALL LETTER K WITH CEDILLA +EE 012B L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH MACRON +EF 013C L Y CF EF CF 6C 6C 6C # LATIN SMALL LETTER L WITH CEDILLA +F0 0161 L Y D0 F0 D0 73 73 73 # LATIN SMALL LETTER S WITH CARON +F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE +F2 0146 L Y D2 F2 D2 6E 6E 6E # LATIN SMALL LETTER N WITH CEDILLA +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 014D L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH MACRON +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 0173 L Y D8 F8 D8 75 2A 00 # LATIN SMALL LETTER U WITH OGONEK +F9 0142 L Y D9 F9 D9 F9 F9 F9 # LATIN SMALL LETTER L WITH STROKE +FA 015B L Y DA FA DA 73 73 73 # LATIN SMALL LETTER S WITH ACUTE +FB 016B L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH MACRON +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 017C L Y DD FD DD 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE +FE 017E L Y DE FE DE 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +FF 2019 - Y FF FF FF 00 00 00 # RIGHT SINGLE QUOTATION MARK diff --git a/assets/data/iso-8859-14.cmap b/assets/data/iso-8859-14.cmap new file mode 100644 index 0000000..ef6006c --- /dev/null +++ b/assets/data/iso-8859-14.cmap @@ -0,0 +1,2010 @@ +INTERNAL +/ +N 913 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 / + N 1 + 0307 > A1 + . +0043 > 43 / + N 2 + 0307 > A4 + 0327 > C7 + . +0044 > 44 / + N 1 + 0307 > A6 + . +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 / + N 1 + 0307 > B0 + . +0047 > 47 / + N 1 + 0307 > B2 + . +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D / + N 1 + 0307 > B4 + . +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 / + N 1 + 0307 > B7 + . +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 0307 > BB + . +0054 > 54 / + N 1 + 0307 > D7 + . +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 / + N 4 + 0300 > A8 + 0301 > AA + 0302 > D0 + 0308 > BD + . +0058 > 58 +0059 > 59 / + N 4 + 0300 > AC + 0301 > DD + 0302 > DE + 0308 > AF + . +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 / + N 1 + 0307 > A2 + . +0063 > 63 / + N 2 + 0307 > A5 + 0327 > E7 + . +0064 > 64 / + N 1 + 0307 > AB + . +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 / + N 1 + 0307 > B1 + . +0067 > 67 / + N 1 + 0307 > B3 + . +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D / + N 1 + 0307 > B5 + . +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 / + N 1 + 0307 > B9 + . +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 0307 > BF + . +0074 > 74 / + N 1 + 0307 > F7 + . +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 / + N 4 + 0300 > B8 + 0301 > BA + 0302 > F0 + 0308 > BE + . +0078 > 78 +0079 > 79 / + N 4 + 0300 > BC + 0301 > FD + 0302 > FE + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A3 > A3 +00A7 > A7 +00A9 > A9 +00AD > AD +00AE > AE +00B6 > B6 +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FF > FF +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > A4 +010B > A5 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > B2 +0121 > B3 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > D0 +0175 > F0 +0176 > DE +0177 > FE +0178 > AF +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +01FE > D8 # unsup: 00D8 0301 +01FF > F8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > A1 +1E03 > A2 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > A6 +1E0B > AB +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > B0 +1E1F > B1 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > B4 +1E41 > B5 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > B7 +1E57 > B9 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > BB +1E61 > BF +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > D7 +1E6B > F7 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > A8 +1E81 > B8 +1E82 > AA +1E83 > BA +1E84 > BD +1E85 > BE +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > CA # unsup: 00CA 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > CA # unsup: 00CA 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > CA # unsup: 00CA 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > CA # unsup: 00CA 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > AC +1EF3 > BC +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE1 > A3 # compat +. + +STRICT +/ +N 258 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 / + N 1 + 0307 > A1 + . +0043 > 43 / + N 2 + 0307 > A4 + 0327 > C7 + . +0044 > 44 / + N 1 + 0307 > A6 + . +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 / + N 1 + 0307 > B0 + . +0047 > 47 / + N 1 + 0307 > B2 + . +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D / + N 1 + 0307 > B4 + . +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 / + N 1 + 0307 > B7 + . +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 0307 > BB + . +0054 > 54 / + N 1 + 0307 > D7 + . +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 / + N 4 + 0300 > A8 + 0301 > AA + 0302 > D0 + 0308 > BD + . +0058 > 58 +0059 > 59 / + N 4 + 0300 > AC + 0301 > DD + 0302 > DE + 0308 > AF + . +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 / + N 1 + 0307 > A2 + . +0063 > 63 / + N 2 + 0307 > A5 + 0327 > E7 + . +0064 > 64 / + N 1 + 0307 > AB + . +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 / + N 1 + 0307 > B1 + . +0067 > 67 / + N 1 + 0307 > B3 + . +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D / + N 1 + 0307 > B5 + . +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 / + N 1 + 0307 > B9 + . +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 0307 > BF + . +0074 > 74 / + N 1 + 0307 > F7 + . +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 / + N 4 + 0300 > B8 + 0301 > BA + 0302 > F0 + 0308 > BE + . +0078 > 78 +0079 > 79 / + N 4 + 0300 > BC + 0301 > FD + 0302 > FE + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A3 > A3 +00A7 > A7 +00A9 > A9 +00AD > AD +00AE > AE +00B6 > B6 +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FF > FF +010A > A4 +010B > A5 +0120 > B2 +0121 > B3 +0174 > D0 +0175 > F0 +0176 > DE +0177 > FE +0178 > AF +037E > 3B +1E02 > A1 +1E03 > A2 +1E0A > A6 +1E0B > AB +1E1E > B0 +1E1F > B1 +1E40 > B4 +1E41 > B5 +1E56 > B7 +1E57 > B9 +1E60 > BB +1E61 > BF +1E6A > D7 +1E6B > F7 +1E80 > A8 +1E81 > B8 +1E82 > AA +1E83 > BA +1E84 > BD +1E85 > BE +1EF2 > AC +1EF3 > BC +1FEF > 60 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0042 0307 +A2 > 0062 0307 +A3 > 00A3 +A4 > 0043 0307 +A5 > 0063 0307 +A6 > 0044 0307 +A7 > 00A7 +A8 > 0057 0300 +A9 > 00A9 +AA > 0057 0301 +AB > 0064 0307 +AC > 0059 0300 +AD > 00AD +AE > 00AE +AF > 0059 0308 +B0 > 0046 0307 +B1 > 0066 0307 +B2 > 0047 0307 +B3 > 0067 0307 +B4 > 004D 0307 +B5 > 006D 0307 +B6 > 00B6 +B7 > 0050 0307 +B8 > 0077 0300 +B9 > 0070 0307 +BA > 0077 0301 +BB > 0053 0307 +BC > 0079 0300 +BD > 0057 0308 +BE > 0077 0308 +BF > 0073 0307 +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0303 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0049 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 0057 0302 +D1 > 004E 0303 +D2 > 004F 0300 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 0054 0307 +D8 > 00D8 +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0059 0301 +DE > 0059 0302 +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0303 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0069 0300 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 0077 0302 +F1 > 006E 0303 +F2 > 006F 0300 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 0074 0307 +F8 > 00F8 +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0079 0301 +FE > 0079 0302 +FF > 0079 0308 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 1E02 +A2 > 1E03 +A3 > 00A3 +A4 > 010A +A5 > 010B +A6 > 1E0A +A7 > 00A7 +A8 > 1E80 +A9 > 00A9 +AA > 1E82 +AB > 1E0B +AC > 1EF2 +AD > 00AD +AE > 00AE +AF > 0178 +B0 > 1E1E +B1 > 1E1F +B2 > 0120 +B3 > 0121 +B4 > 1E40 +B5 > 1E41 +B6 > 00B6 +B7 > 1E56 +B8 > 1E81 +B9 > 1E57 +BA > 1E83 +BB > 1E60 +BC > 1EF3 +BD > 1E84 +BE > 1E85 +BF > 1E61 +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 +C3 > 00C3 +C4 > 00C4 +C5 > 00C5 +C6 > 00C6 +C7 > 00C7 +C8 > 00C8 +C9 > 00C9 +CA > 00CA +CB > 00CB +CC > 00CC +CD > 00CD +CE > 00CE +CF > 00CF +D0 > 0174 +D1 > 00D1 +D2 > 00D2 +D3 > 00D3 +D4 > 00D4 +D5 > 00D5 +D6 > 00D6 +D7 > 1E6A +D8 > 00D8 +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 00DD +DE > 0176 +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 +E3 > 00E3 +E4 > 00E4 +E5 > 00E5 +E6 > 00E6 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 00EC +ED > 00ED +EE > 00EE +EF > 00EF +F0 > 0175 +F1 > 00F1 +F2 > 00F2 +F3 > 00F3 +F4 > 00F4 +F5 > 00F5 +F6 > 00F6 +F7 > 1E6B +F8 > 00F8 +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 00FD +FE > 0177 +FF > 00FF +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-14.cset b/assets/data/iso-8859-14.cset new file mode 100644 index 0000000..c37a862 --- /dev/null +++ b/assets/data/iso-8859-14.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-14 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 1E02 L Y A1 A2 A1 42 62 62 # LATIN CAPITAL LETTER B WITH DOT ABOVE +A2 1E03 L Y A1 A2 A1 62 62 62 # LATIN SMALL LETTER B WITH DOT ABOVE +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 010A L Y A4 A5 A4 43 63 63 # LATIN CAPITAL LETTER C WITH DOT ABOVE +A5 010B L Y A4 A5 A4 63 63 63 # LATIN SMALL LETTER C WITH DOT ABOVE +A6 1E0A L Y A6 AB A6 44 64 64 # LATIN CAPITAL LETTER D WITH DOT ABOVE +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 1E80 L Y A8 B8 A8 57 77 77 # LATIN CAPITAL LETTER W WITH GRAVE +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 1E82 L Y AA BA AA 57 77 77 # LATIN CAPITAL LETTER W WITH ACUTE +AB 1E0B L Y A6 AB A6 64 64 64 # LATIN SMALL LETTER D WITH DOT ABOVE +AC 1EF2 L Y AC BC AC 59 79 79 # LATIN CAPITAL LETTER Y WITH GRAVE +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 0178 L Y AF FF AF 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS +B0 1E1E L Y B0 B1 B0 46 66 66 # LATIN CAPITAL LETTER F WITH DOT ABOVE +B1 1E1F L Y B0 B1 B0 66 66 66 # LATIN SMALL LETTER F WITH DOT ABOVE +B2 0120 L Y B2 B3 B2 47 67 67 # LATIN CAPITAL LETTER G WITH DOT ABOVE +B3 0121 L Y B2 B3 B2 67 67 67 # LATIN SMALL LETTER G WITH DOT ABOVE +B4 1E40 L Y B4 B5 B4 4D 6D 6D # LATIN CAPITAL LETTER M WITH DOT ABOVE +B5 1E41 L Y B4 B5 B4 6D 6D 6D # LATIN SMALL LETTER M WITH DOT ABOVE +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 1E56 L Y B7 B9 B7 50 70 70 # LATIN CAPITAL LETTER P WITH DOT ABOVE +B8 1E81 L Y A8 B8 A8 77 77 77 # LATIN SMALL LETTER W WITH GRAVE +B9 1E57 L Y B7 B9 B7 70 70 70 # LATIN SMALL LETTER P WITH DOT ABOVE +BA 1E83 L Y AA BA AA 77 77 77 # LATIN SMALL LETTER W WITH ACUTE +BB 1E60 L Y BB BF BB 53 73 73 # LATIN CAPITAL LETTER S WITH DOT ABOVE +BC 1EF3 L Y AC BC AC 79 79 79 # LATIN SMALL LETTER Y WITH GRAVE +BD 1E84 L Y BD BE BD 57 77 77 # LATIN CAPITAL LETTER W WITH DIAERESIS +BE 1E85 L Y BD BE BD 77 77 77 # LATIN SMALL LETTER W WITH DIAERESIS +BF 1E61 L Y BB BF BB 73 73 73 # LATIN SMALL LETTER S WITH DOT ABOVE +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 0174 L Y D0 F0 D0 57 77 77 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE +D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 1E6A L Y D7 F7 D7 54 74 74 # LATIN CAPITAL LETTER T WITH DOT ABOVE +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE +DE 0176 L Y DE FE DE 59 79 79 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 0175 L Y D0 F0 D0 77 77 77 # LATIN SMALL LETTER W WITH CIRCUMFLEX +F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE +F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 1E6B L Y D7 F7 D7 74 74 74 # LATIN SMALL LETTER T WITH DOT ABOVE +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE +FE 0177 L Y DE FE DE 79 79 79 # LATIN SMALL LETTER Y WITH CIRCUMFLEX +FF 00FF L Y AF FF AF 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/assets/data/iso-8859-15.cmap b/assets/data/iso-8859-15.cmap new file mode 100644 index 0000000..b028cc6 --- /dev/null +++ b/assets/data/iso-8859-15.cmap @@ -0,0 +1,1934 @@ +INTERNAL +/ +N 944 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 030C > A6 + . +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 2 + 0301 > DD + 0308 > BE + . +005A > 5A / + N 1 + 030C > B4 + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 030C > A8 + . +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 2 + 0301 > FD + 0308 > FF + . +007A > 7A / + N 1 + 030C > B8 + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A5 > A5 +00A7 > A7 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B9 > B9 +00BA > BA +00BB > BB +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D0 > D0 +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DE > DE +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F0 > F0 +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FE > FE +00FF > FF +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > BC +0153 > BD +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > A6 +0161 > A8 +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > BE +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > B4 +017E > B8 +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 B4 # compat +01C5 > 44 B8 # compat +01C6 > 64 B8 # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +01FE > D8 # unsup: 00D8 0301 +01FF > F8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > A6 # unsup: 0160 0307 +1E67 > A8 # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > CA # unsup: 00CA 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > CA # unsup: 00CA 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > CA # unsup: 00CA 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > CA # unsup: 00CA 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > A4 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 030C > A6 + . +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 2 + 0301 > DD + 0308 > BE + . +005A > 5A / + N 1 + 030C > B4 + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 030C > A8 + . +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 2 + 0301 > FD + 0308 > FF + . +007A > 7A / + N 1 + 030C > B8 + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A5 > A5 +00A7 > A7 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B9 > B9 +00BA > BA +00BB > BB +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D0 > D0 +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > DD +00DE > DE +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F0 > F0 +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > FD +00FE > FE +00FF > FF +0152 > BC +0153 > BD +0160 > A6 +0161 > A8 +0178 > BE +017D > B4 +017E > B8 +037E > 3B +0387 > B7 +1FEF > 60 +20AC > A4 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 20AC +A5 > 00A5 +A6 > 0053 030C +A7 > 00A7 +A8 > 0073 030C +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 005A 030C +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 007A 030C +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 0152 +BD > 0153 +BE > 0059 0308 +BF > 00BF +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0303 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0049 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 00D0 +D1 > 004E 0303 +D2 > 004F 0300 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 00D7 +D8 > 00D8 +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0059 0301 +DE > 00DE +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0303 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0069 0300 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 00F0 +F1 > 006E 0303 +F2 > 006F 0300 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 00F7 +F8 > 00F8 +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0079 0301 +FE > 00FE +FF > 0079 0308 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 20AC +A5 > 00A5 +A6 > 0160 +A7 > 00A7 +A8 > 0161 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 017D +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 017E +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 0152 +BD > 0153 +BE > 0178 +BF > 00BF +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 +C3 > 00C3 +C4 > 00C4 +C5 > 00C5 +C6 > 00C6 +C7 > 00C7 +C8 > 00C8 +C9 > 00C9 +CA > 00CA +CB > 00CB +CC > 00CC +CD > 00CD +CE > 00CE +CF > 00CF +D0 > 00D0 +D1 > 00D1 +D2 > 00D2 +D3 > 00D3 +D4 > 00D4 +D5 > 00D5 +D6 > 00D6 +D7 > 00D7 +D8 > 00D8 +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 00DD +DE > 00DE +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 +E3 > 00E3 +E4 > 00E4 +E5 > 00E5 +E6 > 00E6 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 00EC +ED > 00ED +EE > 00EE +EF > 00EF +F0 > 00F0 +F1 > 00F1 +F2 > 00F2 +F3 > 00F3 +F4 > 00F4 +F5 > 00F5 +F6 > 00F6 +F7 > 00F7 +F8 > 00F8 +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 00FD +FE > 00FE +FF > 00FF +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-15.cset b/assets/data/iso-8859-15.cset new file mode 100644 index 0000000..8bf89d4 --- /dev/null +++ b/assets/data/iso-8859-15.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-15 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 20AC - Y A4 A4 A4 00 00 00 # EURO SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 0160 L Y A6 A8 A6 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 0161 L Y A6 A8 A6 73 73 73 # LATIN SMALL LETTER S WITH CARON +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 017D L Y B4 B8 B4 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 017E L Y B4 B8 B4 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 0152 L Y BC BD BC BC 2A 00 # LATIN CAPITAL LIGATURE OE +BD 0153 L Y BC BD BC BD 2A 00 # LATIN SMALL LIGATURE OE +BE 0178 L Y BE FF BE 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS +BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 00D0 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER ETH +D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE +D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE +DE 00DE L Y DE FE DE DE FE FE # LATIN CAPITAL LETTER THORN +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 00F0 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER ETH +F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE +F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE +FE 00FE L Y DE FE DE FE FE FE # LATIN SMALL LETTER THORN +FF 00FF L Y BE FF BE 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/assets/data/iso-8859-16.cmap b/assets/data/iso-8859-16.cmap new file mode 100644 index 0000000..fbfbd33 --- /dev/null +++ b/assets/data/iso-8859-16.cmap @@ -0,0 +1,1951 @@ +INTERNAL +/ +N 921 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0306 > C3 + 0308 > C4 + 0328 > A1 + . +0042 > 42 +0043 > 43 / + N 3 + 0301 > C5 + 030C > B2 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 5 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + 0328 > DD + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0301 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0308 > D6 + 030B > D5 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 3 + 0301 > D7 + 030C > A6 + 0326 > AA + . +0054 > 54 / + N 1 + 0326 > DE + . +0055 > 55 / + N 5 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + 030B > D8 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0308 > BE + . +005A > 5A / + N 3 + 0301 > AC + 0307 > AF + 030C > B4 + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0306 > E3 + 0308 > E4 + 0328 > A2 + . +0062 > 62 +0063 > 63 / + N 3 + 0301 > E5 + 030C > B9 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 5 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + 0328 > FD + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0301 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0308 > F6 + 030B > F5 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 3 + 0301 > F7 + 030C > A8 + 0326 > BA + . +0074 > 74 / + N 1 + 0326 > FE + . +0075 > 75 / + N 5 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + 030B > F8 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0308 > FF + . +007A > 7A / + N 3 + 0301 > AE + 0307 > BF + 030C > B8 + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A7 > A7 +00A9 > A9 +00AB > AB +00AD > AD +00B0 > B0 +00B1 > B1 +00B6 > B6 +00B7 > B7 +00BB > BB +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > 41 # unsup: 0041 0303 +00C4 > C4 +00C5 > 41 # unsup: 0041 030A +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > 4E # unsup: 004E 0303 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > 4F # unsup: 004F 0303 +00D6 > D6 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > 59 # unsup: 0059 0301 +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > 61 # unsup: 0061 0303 +00E4 > E4 +00E5 > 61 # unsup: 0061 030A +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > 6E # unsup: 006E 0303 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > 6F # unsup: 006F 0303 +00F6 > F6 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > 79 # unsup: 0079 0301 +00FF > FF +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > C3 +0103 > E3 +0104 > A1 +0105 > A2 +0106 > C5 +0107 > E5 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > B2 +010D > B9 +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0110 > D0 +0111 > F0 +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > DD +0119 > FD +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0141 > A3 +0142 > B3 +0143 > D1 +0144 > F1 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > D5 +0151 > F5 +0152 > BC +0153 > BD +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > D7 +015B > F7 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > A6 +0161 > A8 +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > D8 +0171 > F8 +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > BE +0179 > AC +017A > AE +017B > AF +017C > BF +017D > B4 +017E > B8 +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 B4 # compat +01C5 > 44 B8 # compat +01C6 > 64 B8 # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > AA +0219 > BA +021A > DE +021B > FE +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > D7 # unsup: 015A 0307 +1E65 > F7 # unsup: 015B 0307 +1E66 > A6 # unsup: 0160 0307 +1E67 > A8 # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > C3 # unsup: 0102 0301 +1EAF > E3 # unsup: 0103 0301 +1EB0 > C3 # unsup: 0102 0300 +1EB1 > E3 # unsup: 0103 0300 +1EB2 > C3 # unsup: 0102 0309 +1EB3 > E3 # unsup: 0103 0309 +1EB4 > C3 # unsup: 0102 0303 +1EB5 > E3 # unsup: 0103 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > CA # unsup: 00CA 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > CA # unsup: 00CA 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > CA # unsup: 00CA 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > CA # unsup: 00CA 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +201D > B5 +201E > A5 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > A4 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0306 > C3 + 0308 > C4 + 0328 > A1 + . +0042 > 42 +0043 > 43 / + N 3 + 0301 > C5 + 030C > B2 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 5 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + 0328 > DD + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 4 + 0300 > CC + 0301 > CD + 0302 > CE + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0301 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0308 > D6 + 030B > D5 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 3 + 0301 > D7 + 030C > A6 + 0326 > AA + . +0054 > 54 / + N 1 + 0326 > DE + . +0055 > 55 / + N 5 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + 030B > D8 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0308 > BE + . +005A > 5A / + N 3 + 0301 > AC + 0307 > AF + 030C > B4 + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0306 > E3 + 0308 > E4 + 0328 > A2 + . +0062 > 62 +0063 > 63 / + N 3 + 0301 > E5 + 030C > B9 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 5 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + 0328 > FD + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0301 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0308 > F6 + 030B > F5 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 3 + 0301 > F7 + 030C > A8 + 0326 > BA + . +0074 > 74 / + N 1 + 0326 > FE + . +0075 > 75 / + N 5 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + 030B > F8 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0308 > FF + . +007A > 7A / + N 3 + 0301 > AE + 0307 > BF + 030C > B8 + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A7 > A7 +00A9 > A9 +00AB > AB +00AD > AD +00B0 > B0 +00B1 > B1 +00B6 > B6 +00B7 > B7 +00BB > BB +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C4 > C4 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D6 > D6 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E4 > E4 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F6 > F6 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FF > FF +0102 > C3 +0103 > E3 +0104 > A1 +0105 > A2 +0106 > C5 +0107 > E5 +010C > B2 +010D > B9 +0110 > D0 +0111 > F0 +0118 > DD +0119 > FD +0141 > A3 +0142 > B3 +0143 > D1 +0144 > F1 +0150 > D5 +0151 > F5 +0152 > BC +0153 > BD +015A > D7 +015B > F7 +0160 > A6 +0161 > A8 +0170 > D8 +0171 > F8 +0178 > BE +0179 > AC +017A > AE +017B > AF +017C > BF +017D > B4 +017E > B8 +0218 > AA +0219 > BA +021A > DE +021B > FE +037E > 3B +0387 > B7 +1FEF > 60 +201D > B5 +201E > A5 +20AC > A4 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0041 0328 +A2 > 0061 0328 +A3 > 0141 +A4 > 20AC +A5 > 201E +A6 > 0053 030C +A7 > 00A7 +A8 > 0073 030C +A9 > 00A9 +AA > 0053 0326 +AB > 00AB +AC > 005A 0301 +AD > 00AD +AE > 007A 0301 +AF > 005A 0307 +B0 > 00B0 +B1 > 00B1 +B2 > 0043 030C +B3 > 0142 +B4 > 005A 030C +B5 > 201D +B6 > 00B6 +B7 > 00B7 +B8 > 007A 030C +B9 > 0063 030C +BA > 0073 0326 +BB > 00BB +BC > 0152 +BD > 0153 +BE > 0059 0308 +BF > 007A 0307 +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0306 +C4 > 0041 0308 +C5 > 0043 0301 +C6 > 00C6 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0049 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 0110 +D1 > 004E 0301 +D2 > 004F 0300 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 030B +D6 > 004F 0308 +D7 > 0053 0301 +D8 > 0055 030B +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0045 0328 +DE > 0054 0326 +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0306 +E4 > 0061 0308 +E5 > 0063 0301 +E6 > 00E6 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0069 0300 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 0111 +F1 > 006E 0301 +F2 > 006F 0300 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 030B +F6 > 006F 0308 +F7 > 0073 0301 +F8 > 0075 030B +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0065 0328 +FE > 0074 0326 +FF > 0079 0308 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0104 +A2 > 0105 +A3 > 0141 +A4 > 20AC +A5 > 201E +A6 > 0160 +A7 > 00A7 +A8 > 0161 +A9 > 00A9 +AA > 0218 +AB > 00AB +AC > 0179 +AD > 00AD +AE > 017A +AF > 017B +B0 > 00B0 +B1 > 00B1 +B2 > 010C +B3 > 0142 +B4 > 017D +B5 > 201D +B6 > 00B6 +B7 > 00B7 +B8 > 017E +B9 > 010D +BA > 0219 +BB > 00BB +BC > 0152 +BD > 0153 +BE > 0178 +BF > 017C +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 +C3 > 0102 +C4 > 00C4 +C5 > 0106 +C6 > 00C6 +C7 > 00C7 +C8 > 00C8 +C9 > 00C9 +CA > 00CA +CB > 00CB +CC > 00CC +CD > 00CD +CE > 00CE +CF > 00CF +D0 > 0110 +D1 > 0143 +D2 > 00D2 +D3 > 00D3 +D4 > 00D4 +D5 > 0150 +D6 > 00D6 +D7 > 015A +D8 > 0170 +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 0118 +DE > 021A +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 +E3 > 0103 +E4 > 00E4 +E5 > 0107 +E6 > 00E6 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 00EC +ED > 00ED +EE > 00EE +EF > 00EF +F0 > 0111 +F1 > 0144 +F2 > 00F2 +F3 > 00F3 +F4 > 00F4 +F5 > 0151 +F6 > 00F6 +F7 > 015B +F8 > 0171 +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 0119 +FE > 021B +FF > 00FF +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-16.cset b/assets/data/iso-8859-16.cset new file mode 100644 index 0000000..56a71ee --- /dev/null +++ b/assets/data/iso-8859-16.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-16 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 0104 L Y A1 A2 A1 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK +A2 0105 L Y A1 A2 A1 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK +A3 0141 L Y A3 B3 A3 A3 B3 B3 # LATIN CAPITAL LETTER L WITH STROKE +A4 20AC - Y A4 A4 A4 00 00 00 # EURO SIGN +A5 201E - Y A5 A5 A5 00 00 00 # DOUBLE LOW-9 QUOTATION MARK +A6 0160 L Y A6 A8 A6 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 0161 L Y A6 A8 A6 73 73 73 # LATIN SMALL LETTER S WITH CARON +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 0218 L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH COMMA BELOW +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 0179 L Y AC AE AC 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 017A L Y AC AE AC 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE +AF 017B L Y AF BF AF 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 010C L Y B2 B9 B2 43 63 63 # LATIN CAPITAL LETTER C WITH CARON +B3 0142 L Y A3 B3 A3 B3 B3 B3 # LATIN SMALL LETTER L WITH STROKE +B4 017D L Y B4 B8 B4 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +B5 201D - Y B5 B5 B5 00 00 00 # RIGHT DOUBLE QUOTATION MARK +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 017E L Y B4 B8 B4 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +B9 010D L Y B2 B9 B2 63 63 63 # LATIN SMALL LETTER C WITH CARON +BA 0219 L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH COMMA BELOW +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 0152 L Y BC BD BC BC 2A 00 # LATIN CAPITAL LIGATURE OE +BD 0153 L Y BC BD BC BD 2A 00 # LATIN SMALL LIGATURE OE +BE 0178 L Y BE FF BE 59 79 79 # LATIN CAPITAL LETTER Y WITH DIAERESIS +BF 017C L Y AF BF AF 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 0102 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH BREVE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 0106 L Y C5 E5 C5 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE +D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE +D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 0150 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 015A L Y D7 F7 D7 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE +D8 0170 L Y D8 F8 D8 55 2A 00 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 0118 L Y DD FD DD 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK +DE 021A L Y DE FE DE 54 74 74 # LATIN CAPITAL LETTER T WITH COMMA BELOW +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 0103 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH BREVE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 0107 L Y C5 E5 C5 63 63 63 # LATIN SMALL LETTER C WITH ACUTE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE +F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE +F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 0151 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH DOUBLE ACUTE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 015B L Y D7 F7 D7 73 73 73 # LATIN SMALL LETTER S WITH ACUTE +F8 0171 L Y D8 F8 D8 75 2A 00 # LATIN SMALL LETTER U WITH DOUBLE ACUTE +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 0119 L Y DD FD DD 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK +FE 021B L Y DE FE DE 74 74 74 # LATIN SMALL LETTER T WITH COMMA BELOW +FF 00FF L Y BE FF BE 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/assets/data/iso-8859-2.cmap b/assets/data/iso-8859-2.cmap new file mode 100644 index 0000000..811dd83 --- /dev/null +++ b/assets/data/iso-8859-2.cmap @@ -0,0 +1,1983 @@ +INTERNAL +/ +N 925 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 5 + 0301 > C1 + 0302 > C2 + 0306 > C3 + 0308 > C4 + 0328 > A1 + . +0042 > 42 +0043 > 43 / + N 3 + 0301 > C6 + 030C > C8 + 0327 > C7 + . +0044 > 44 / + N 1 + 030C > CF + . +0045 > 45 / + N 4 + 0301 > C9 + 0308 > CB + 030C > CC + 0328 > CA + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 2 + 0301 > CD + 0302 > CE + . +004A > 4A +004B > 4B +004C > 4C / + N 2 + 0301 > C5 + 030C > A5 + . +004D > 4D +004E > 4E / + N 2 + 0301 > D1 + 030C > D2 + . +004F > 4F / + N 4 + 0301 > D3 + 0302 > D4 + 0308 > D6 + 030B > D5 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 2 + 0301 > C0 + 030C > D8 + . +0053 > 53 / + N 3 + 0301 > A6 + 030C > A9 + 0327 > AA + . +0054 > 54 / + N 2 + 030C > AB + 0327 > DE + . +0055 > 55 / + N 4 + 0301 > DA + 0308 > DC + 030A > D9 + 030B > DB + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0301 > DD + . +005A > 5A / + N 3 + 0301 > AC + 0307 > AF + 030C > AE + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 5 + 0301 > E1 + 0302 > E2 + 0306 > E3 + 0308 > E4 + 0328 > B1 + . +0062 > 62 +0063 > 63 / + N 3 + 0301 > E6 + 030C > E8 + 0327 > E7 + . +0064 > 64 / + N 1 + 030C > EF + . +0065 > 65 / + N 4 + 0301 > E9 + 0308 > EB + 030C > EC + 0328 > EA + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 2 + 0301 > ED + 0302 > EE + . +006A > 6A +006B > 6B +006C > 6C / + N 2 + 0301 > E5 + 030C > B5 + . +006D > 6D +006E > 6E / + N 2 + 0301 > F1 + 030C > F2 + . +006F > 6F / + N 4 + 0301 > F3 + 0302 > F4 + 0308 > F6 + 030B > F5 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 2 + 0301 > E0 + 030C > F8 + . +0073 > 73 / + N 3 + 0301 > B6 + 030C > B9 + 0327 > BA + . +0074 > 74 / + N 2 + 030C > BB + 0327 > FE + . +0075 > 75 / + N 4 + 0301 > FA + 0308 > FC + 030A > F9 + 030B > FB + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0301 > FD + . +007A > 7A / + N 3 + 0301 > BC + 0307 > BF + 030C > BE + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A4 > A4 +00A7 > A7 +00A8 > A8 +00AD > AD +00B0 > B0 +00B4 > B4 +00B8 > B8 +00C0 > 41 # unsup: 0041 0300 +00C1 > C1 +00C2 > C2 +00C3 > 41 # unsup: 0041 0303 +00C4 > C4 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > C7 +00C8 > 45 # unsup: 0045 0300 +00C9 > C9 +00CA > 45 # unsup: 0045 0302 +00CB > CB +00CC > 49 # unsup: 0049 0300 +00CD > CD +00CE > CE +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > D3 +00D4 > D4 +00D5 > 4F # unsup: 004F 0303 +00D6 > D6 +00D7 > D7 +00D9 > 55 # unsup: 0055 0300 +00DA > DA +00DB > 55 # unsup: 0055 0302 +00DC > DC +00DD > DD +00DF > DF +00E0 > 61 # unsup: 0061 0300 +00E1 > E1 +00E2 > E2 +00E3 > 61 # unsup: 0061 0303 +00E4 > E4 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > E7 +00E8 > 65 # unsup: 0065 0300 +00E9 > E9 +00EA > 65 # unsup: 0065 0302 +00EB > EB +00EC > 69 # unsup: 0069 0300 +00ED > ED +00EE > EE +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > F3 +00F4 > F4 +00F5 > 6F # unsup: 006F 0303 +00F6 > F6 +00F7 > F7 +00F9 > 75 # unsup: 0075 0300 +00FA > FA +00FB > 75 # unsup: 0075 0302 +00FC > FC +00FD > FD +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > C3 +0103 > E3 +0104 > A1 +0105 > B1 +0106 > C6 +0107 > E6 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > C8 +010D > E8 +010E > CF +010F > EF +0110 > D0 +0111 > F0 +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > CA +0119 > EA +011A > CC +011B > EC +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > C5 +013A > E5 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > A5 +013E > B5 +0141 > A3 +0142 > B3 +0143 > D1 +0144 > F1 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > D2 +0148 > F2 +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > D5 +0151 > F5 +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > C0 +0155 > E0 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > D8 +0159 > F8 +015A > A6 +015B > B6 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > AA +015F > BA +0160 > A9 +0161 > B9 +0162 > DE +0163 > FE +0164 > AB +0165 > BB +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > D9 +016F > F9 +0170 > DB +0171 > FB +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > AC +017A > BC +017B > AF +017C > BF +017D > AE +017E > BE +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 AE # compat +01C5 > 44 BE # compat +01C6 > 64 BE # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C7 > B7 +02D8 > A2 +02D9 > FF +02DB > B2 +02DD > BD +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > A6 # unsup: 015A 0307 +1E65 > B6 # unsup: 015B 0307 +1E66 > A9 # unsup: 0160 0307 +1E67 > B9 # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > C3 # unsup: 0102 0301 +1EAF > E3 # unsup: 0103 0301 +1EB0 > C3 # unsup: 0102 0300 +1EB1 > E3 # unsup: 0103 0300 +1EB2 > C3 # unsup: 0102 0309 +1EB3 > E3 # unsup: 0103 0309 +1EB4 > C3 # unsup: 0102 0303 +1EB5 > E3 # unsup: 0103 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 5 + 0301 > C1 + 0302 > C2 + 0306 > C3 + 0308 > C4 + 0328 > A1 + . +0042 > 42 +0043 > 43 / + N 3 + 0301 > C6 + 030C > C8 + 0327 > C7 + . +0044 > 44 / + N 1 + 030C > CF + . +0045 > 45 / + N 4 + 0301 > C9 + 0308 > CB + 030C > CC + 0328 > CA + . +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 / + N 2 + 0301 > CD + 0302 > CE + . +004A > 4A +004B > 4B +004C > 4C / + N 2 + 0301 > C5 + 030C > A5 + . +004D > 4D +004E > 4E / + N 2 + 0301 > D1 + 030C > D2 + . +004F > 4F / + N 4 + 0301 > D3 + 0302 > D4 + 0308 > D6 + 030B > D5 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 2 + 0301 > C0 + 030C > D8 + . +0053 > 53 / + N 3 + 0301 > A6 + 030C > A9 + 0327 > AA + . +0054 > 54 / + N 2 + 030C > AB + 0327 > DE + . +0055 > 55 / + N 4 + 0301 > DA + 0308 > DC + 030A > D9 + 030B > DB + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 / + N 1 + 0301 > DD + . +005A > 5A / + N 3 + 0301 > AC + 0307 > AF + 030C > AE + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 5 + 0301 > E1 + 0302 > E2 + 0306 > E3 + 0308 > E4 + 0328 > B1 + . +0062 > 62 +0063 > 63 / + N 3 + 0301 > E6 + 030C > E8 + 0327 > E7 + . +0064 > 64 / + N 1 + 030C > EF + . +0065 > 65 / + N 4 + 0301 > E9 + 0308 > EB + 030C > EC + 0328 > EA + . +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 / + N 2 + 0301 > ED + 0302 > EE + . +006A > 6A +006B > 6B +006C > 6C / + N 2 + 0301 > E5 + 030C > B5 + . +006D > 6D +006E > 6E / + N 2 + 0301 > F1 + 030C > F2 + . +006F > 6F / + N 4 + 0301 > F3 + 0302 > F4 + 0308 > F6 + 030B > F5 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 2 + 0301 > E0 + 030C > F8 + . +0073 > 73 / + N 3 + 0301 > B6 + 030C > B9 + 0327 > BA + . +0074 > 74 / + N 2 + 030C > BB + 0327 > FE + . +0075 > 75 / + N 4 + 0301 > FA + 0308 > FC + 030A > F9 + 030B > FB + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0301 > FD + . +007A > 7A / + N 3 + 0301 > BC + 0307 > BF + 030C > BE + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A4 > A4 +00A7 > A7 +00A8 > A8 +00AD > AD +00B0 > B0 +00B4 > B4 +00B8 > B8 +00C1 > C1 +00C2 > C2 +00C4 > C4 +00C7 > C7 +00C9 > C9 +00CB > CB +00CD > CD +00CE > CE +00D3 > D3 +00D4 > D4 +00D6 > D6 +00D7 > D7 +00DA > DA +00DC > DC +00DD > DD +00DF > DF +00E1 > E1 +00E2 > E2 +00E4 > E4 +00E7 > E7 +00E9 > E9 +00EB > EB +00ED > ED +00EE > EE +00F3 > F3 +00F4 > F4 +00F6 > F6 +00F7 > F7 +00FA > FA +00FC > FC +00FD > FD +0102 > C3 +0103 > E3 +0104 > A1 +0105 > B1 +0106 > C6 +0107 > E6 +010C > C8 +010D > E8 +010E > CF +010F > EF +0110 > D0 +0111 > F0 +0118 > CA +0119 > EA +011A > CC +011B > EC +0139 > C5 +013A > E5 +013D > A5 +013E > B5 +0141 > A3 +0142 > B3 +0143 > D1 +0144 > F1 +0147 > D2 +0148 > F2 +0150 > D5 +0151 > F5 +0154 > C0 +0155 > E0 +0158 > D8 +0159 > F8 +015A > A6 +015B > B6 +015E > AA +015F > BA +0160 > A9 +0161 > B9 +0162 > DE +0163 > FE +0164 > AB +0165 > BB +016E > D9 +016F > F9 +0170 > DB +0171 > FB +0179 > AC +017A > BC +017B > AF +017C > BF +017D > AE +017E > BE +02C7 > B7 +02D8 > A2 +02D9 > FF +02DB > B2 +02DD > BD +037E > 3B +1FEF > 60 +1FFD > B4 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0041 0328 +A2 > 02D8 +A3 > 0141 +A4 > 00A4 +A5 > 004C 030C +A6 > 0053 0301 +A7 > 00A7 +A8 > 00A8 +A9 > 0053 030C +AA > 0053 0327 +AB > 0054 030C +AC > 005A 0301 +AD > 00AD +AE > 005A 030C +AF > 005A 0307 +B0 > 00B0 +B1 > 0061 0328 +B2 > 02DB +B3 > 0142 +B4 > 00B4 +B5 > 006C 030C +B6 > 0073 0301 +B7 > 02C7 +B8 > 00B8 +B9 > 0073 030C +BA > 0073 0327 +BB > 0074 030C +BC > 007A 0301 +BD > 02DD +BE > 007A 030C +BF > 007A 0307 +C0 > 0052 0301 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0306 +C4 > 0041 0308 +C5 > 004C 0301 +C6 > 0043 0301 +C7 > 0043 0327 +C8 > 0043 030C +C9 > 0045 0301 +CA > 0045 0328 +CB > 0045 0308 +CC > 0045 030C +CD > 0049 0301 +CE > 0049 0302 +CF > 0044 030C +D0 > 0110 +D1 > 004E 0301 +D2 > 004E 030C +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 030B +D6 > 004F 0308 +D7 > 00D7 +D8 > 0052 030C +D9 > 0055 030A +DA > 0055 0301 +DB > 0055 030B +DC > 0055 0308 +DD > 0059 0301 +DE > 0054 0327 +DF > 00DF +E0 > 0072 0301 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0306 +E4 > 0061 0308 +E5 > 006C 0301 +E6 > 0063 0301 +E7 > 0063 0327 +E8 > 0063 030C +E9 > 0065 0301 +EA > 0065 0328 +EB > 0065 0308 +EC > 0065 030C +ED > 0069 0301 +EE > 0069 0302 +EF > 0064 030C +F0 > 0111 +F1 > 006E 0301 +F2 > 006E 030C +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 030B +F6 > 006F 0308 +F7 > 00F7 +F8 > 0072 030C +F9 > 0075 030A +FA > 0075 0301 +FB > 0075 030B +FC > 0075 0308 +FD > 0079 0301 +FE > 0074 0327 +FF > 02D9 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0104 +A2 > 02D8 +A3 > 0141 +A4 > 00A4 +A5 > 013D +A6 > 015A +A7 > 00A7 +A8 > 00A8 +A9 > 0160 +AA > 015E +AB > 0164 +AC > 0179 +AD > 00AD +AE > 017D +AF > 017B +B0 > 00B0 +B1 > 0105 +B2 > 02DB +B3 > 0142 +B4 > 00B4 +B5 > 013E +B6 > 015B +B7 > 02C7 +B8 > 00B8 +B9 > 0161 +BA > 015F +BB > 0165 +BC > 017A +BD > 02DD +BE > 017E +BF > 017C +C0 > 0154 +C1 > 00C1 +C2 > 00C2 +C3 > 0102 +C4 > 00C4 +C5 > 0139 +C6 > 0106 +C7 > 00C7 +C8 > 010C +C9 > 00C9 +CA > 0118 +CB > 00CB +CC > 011A +CD > 00CD +CE > 00CE +CF > 010E +D0 > 0110 +D1 > 0143 +D2 > 0147 +D3 > 00D3 +D4 > 00D4 +D5 > 0150 +D6 > 00D6 +D7 > 00D7 +D8 > 0158 +D9 > 016E +DA > 00DA +DB > 0170 +DC > 00DC +DD > 00DD +DE > 0162 +DF > 00DF +E0 > 0155 +E1 > 00E1 +E2 > 00E2 +E3 > 0103 +E4 > 00E4 +E5 > 013A +E6 > 0107 +E7 > 00E7 +E8 > 010D +E9 > 00E9 +EA > 0119 +EB > 00EB +EC > 011B +ED > 00ED +EE > 00EE +EF > 010F +F0 > 0111 +F1 > 0144 +F2 > 0148 +F3 > 00F3 +F4 > 00F4 +F5 > 0151 +F6 > 00F6 +F7 > 00F7 +F8 > 0159 +F9 > 016F +FA > 00FA +FB > 0171 +FC > 00FC +FD > 00FD +FE > 0163 +FF > 02D9 +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-2.cset b/assets/data/iso-8859-2.cset new file mode 100644 index 0000000..b425187 --- /dev/null +++ b/assets/data/iso-8859-2.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-2 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 0104 L Y A1 B1 A1 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK +A2 02D8 - Y A2 A2 A2 00 00 00 # BREVE +A3 0141 L Y A3 B3 A3 A3 B3 B3 # LATIN CAPITAL LETTER L WITH STROKE +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 013D L Y A5 B5 A5 4C 6C 6C # LATIN CAPITAL LETTER L WITH CARON +A6 015A L Y A6 B6 A6 53 73 73 # LATIN CAPITAL LETTER S WITH ACUTE +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 0160 L Y A9 B9 A9 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +AA 015E L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA +AB 0164 L Y AB BB AB 54 74 74 # LATIN CAPITAL LETTER T WITH CARON +AC 0179 L Y AC BC AC 5A 7A 7A # LATIN CAPITAL LETTER Z WITH ACUTE +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 017D L Y AE BE AE 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +AF 017B L Y AF BF AF 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 0105 L Y A1 B1 A1 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK +B2 02DB - Y B2 B2 B2 00 00 00 # OGONEK +B3 0142 L Y A3 B3 A3 B3 B3 B3 # LATIN SMALL LETTER L WITH STROKE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 013E L Y A5 B5 A5 6C 6C 6C # LATIN SMALL LETTER L WITH CARON +B6 015B L Y A6 B6 A6 73 73 73 # LATIN SMALL LETTER S WITH ACUTE +B7 02C7 M Y B7 B7 B7 00 00 00 # CARON +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 0161 L Y A9 B9 A9 73 73 73 # LATIN SMALL LETTER S WITH CARON +BA 015F L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA +BB 0165 L Y AB BB AB 74 74 74 # LATIN SMALL LETTER T WITH CARON +BC 017A L Y AC BC AC 7A 7A 7A # LATIN SMALL LETTER Z WITH ACUTE +BD 02DD - Y BD BD BD 00 00 00 # DOUBLE ACUTE ACCENT +BE 017E L Y AE BE AE 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +BF 017C L Y AF BF AF 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE +C0 0154 L Y C0 E0 C0 52 72 72 # LATIN CAPITAL LETTER R WITH ACUTE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 0102 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH BREVE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 0139 L Y C5 E5 C5 4C 6C 6C # LATIN CAPITAL LETTER L WITH ACUTE +C6 0106 L Y C6 E6 C6 43 63 63 # LATIN CAPITAL LETTER C WITH ACUTE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 0118 L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 011A L Y CC EC CC 45 2A 00 # LATIN CAPITAL LETTER E WITH CARON +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 010E L Y CF EF CF 44 64 64 # LATIN CAPITAL LETTER D WITH CARON +D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE +D1 0143 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH ACUTE +D2 0147 L Y D2 F2 D2 4E 6E 6E # LATIN CAPITAL LETTER N WITH CARON +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 0150 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 0158 L Y D8 F8 D8 52 72 72 # LATIN CAPITAL LETTER R WITH CARON +D9 016E L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH RING ABOVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 0170 L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 00DD L Y DD FD DD 59 79 79 # LATIN CAPITAL LETTER Y WITH ACUTE +DE 0162 L Y DE FE DE 54 74 74 # LATIN CAPITAL LETTER T WITH CEDILLA +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 0155 L Y C0 E0 C0 72 72 72 # LATIN SMALL LETTER R WITH ACUTE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 0103 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH BREVE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 013A L Y C5 E5 C5 6C 6C 6C # LATIN SMALL LETTER L WITH ACUTE +E6 0107 L Y C6 E6 C6 63 63 63 # LATIN SMALL LETTER C WITH ACUTE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 0119 L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 011B L Y CC EC CC 65 2A 00 # LATIN SMALL LETTER E WITH CARON +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 010F L Y CF EF CF 64 64 64 # LATIN SMALL LETTER D WITH CARON +F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE +F1 0144 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH ACUTE +F2 0148 L Y D2 F2 D2 6E 6E 6E # LATIN SMALL LETTER N WITH CARON +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 0151 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH DOUBLE ACUTE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 0159 L Y D8 F8 D8 72 72 72 # LATIN SMALL LETTER R WITH CARON +F9 016F L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH RING ABOVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 0171 L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH DOUBLE ACUTE +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 00FD L Y DD FD DD 79 79 79 # LATIN SMALL LETTER Y WITH ACUTE +FE 0163 L Y DE FE DE 74 74 74 # LATIN SMALL LETTER T WITH CEDILLA +FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE diff --git a/assets/data/iso-8859-3.cmap b/assets/data/iso-8859-3.cmap new file mode 100644 index 0000000..87215dd --- /dev/null +++ b/assets/data/iso-8859-3.cmap @@ -0,0 +1,1935 @@ +INTERNAL +/ +N 931 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 4 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0308 > C4 + . +0042 > 42 +0043 > 43 / + N 3 + 0302 > C6 + 0307 > C5 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 / + N 3 + 0302 > D8 + 0306 > AB + 0307 > D5 + . +0048 > 48 / + N 1 + 0302 > A6 + . +0049 > 49 / + N 5 + 0300 > CC + 0301 > CD + 0302 > CE + 0307 > A9 + 0308 > CF + . +004A > 4A / + N 1 + 0302 > AC + . +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 4 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 2 + 0302 > DE + 0327 > AA + . +0054 > 54 +0055 > 55 / + N 5 + 0300 > D9 + 0301 > DA + 0302 > DB + 0306 > DD + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A / + N 1 + 0307 > AF + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 4 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0308 > E4 + . +0062 > 62 +0063 > 63 / + N 3 + 0302 > E6 + 0307 > E5 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 / + N 3 + 0302 > F8 + 0306 > BB + 0307 > F5 + . +0068 > 68 / + N 1 + 0302 > B6 + . +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A / + N 1 + 0302 > BC + . +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 4 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 2 + 0302 > FE + 0327 > BA + . +0074 > 74 +0075 > 75 / + N 5 + 0300 > F9 + 0301 > FA + 0302 > FB + 0306 > FD + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A / + N 1 + 0307 > BF + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A3 > A3 +00A4 > A4 +00A7 > A7 +00A8 > A8 +00AD > AD +00B0 > B0 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B7 > B7 +00B8 > B8 +00BD > BD +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > 41 # unsup: 0041 0303 +00C4 > C4 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > 4F # unsup: 004F 0303 +00D6 > D6 +00D7 > D7 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > 59 # unsup: 0059 0301 +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > 61 # unsup: 0061 0303 +00E4 > E4 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > 6F # unsup: 006F 0303 +00F6 > F6 +00F7 > F7 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > C6 +0109 > E6 +010A > C5 +010B > E5 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > D8 +011D > F8 +011E > AB +011F > BB +0120 > D5 +0121 > F5 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > A6 +0125 > B6 +0126 > A1 +0127 > B1 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > A9 +0131 > B9 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > AC +0135 > BC +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > DE +015D > FE +015E > AA +015F > BA +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > DD +016D > FD +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > AF +017C > BF +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02D8 > A2 +02D9 > FF +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > CA # unsup: 00CA 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > CA # unsup: 00CA 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > CA # unsup: 00CA 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > CA # unsup: 00CA 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE1 > A3 # compat +. + +STRICT +/ +N 253 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 4 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0308 > C4 + . +0042 > 42 +0043 > 43 / + N 3 + 0302 > C6 + 0307 > C5 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 / + N 3 + 0302 > D8 + 0306 > AB + 0307 > D5 + . +0048 > 48 / + N 1 + 0302 > A6 + . +0049 > 49 / + N 5 + 0300 > CC + 0301 > CD + 0302 > CE + 0307 > A9 + 0308 > CF + . +004A > 4A / + N 1 + 0302 > AC + . +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 4 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 2 + 0302 > DE + 0327 > AA + . +0054 > 54 +0055 > 55 / + N 5 + 0300 > D9 + 0301 > DA + 0302 > DB + 0306 > DD + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A / + N 1 + 0307 > AF + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 4 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0308 > E4 + . +0062 > 62 +0063 > 63 / + N 3 + 0302 > E6 + 0307 > E5 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 / + N 3 + 0302 > F8 + 0306 > BB + 0307 > F5 + . +0068 > 68 / + N 1 + 0302 > B6 + . +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A / + N 1 + 0302 > BC + . +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 4 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 2 + 0302 > FE + 0327 > BA + . +0074 > 74 +0075 > 75 / + N 5 + 0300 > F9 + 0301 > FA + 0302 > FB + 0306 > FD + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A / + N 1 + 0307 > BF + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A3 > A3 +00A4 > A4 +00A7 > A7 +00A8 > A8 +00AD > AD +00B0 > B0 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B7 > B7 +00B8 > B8 +00BD > BD +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C4 > C4 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D6 > D6 +00D7 > D7 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E4 > E4 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F6 > F6 +00F7 > F7 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +0108 > C6 +0109 > E6 +010A > C5 +010B > E5 +011C > D8 +011D > F8 +011E > AB +011F > BB +0120 > D5 +0121 > F5 +0124 > A6 +0125 > B6 +0126 > A1 +0127 > B1 +0130 > A9 +0131 > B9 +0134 > AC +0135 > BC +015C > DE +015D > FE +015E > AA +015F > BA +016C > DD +016D > FD +017B > AF +017C > BF +02D8 > A2 +02D9 > FF +037E > 3B +0387 > B7 +1FEF > 60 +1FFD > B4 +. + +NFD +/ +N 249 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0126 +A2 > 02D8 +A3 > 00A3 +A4 > 00A4 +A6 > 0048 0302 +A7 > 00A7 +A8 > 00A8 +A9 > 0049 0307 +AA > 0053 0327 +AB > 0047 0306 +AC > 004A 0302 +AD > 00AD +AF > 005A 0307 +B0 > 00B0 +B1 > 0127 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 0068 0302 +B7 > 00B7 +B8 > 00B8 +B9 > 0131 +BA > 0073 0327 +BB > 0067 0306 +BC > 006A 0302 +BD > 00BD +BF > 007A 0307 +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C4 > 0041 0308 +C5 > 0043 0307 +C6 > 0043 0302 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0049 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D1 > 004E 0303 +D2 > 004F 0300 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 0047 0307 +D6 > 004F 0308 +D7 > 00D7 +D8 > 0047 0302 +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0055 0306 +DE > 0053 0302 +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E4 > 0061 0308 +E5 > 0063 0307 +E6 > 0063 0302 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0069 0300 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F1 > 006E 0303 +F2 > 006F 0300 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 0067 0307 +F6 > 006F 0308 +F7 > 00F7 +F8 > 0067 0302 +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0075 0306 +FE > 0073 0302 +FF > 02D9 +. + +NFC +/ +N 249 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0126 +A2 > 02D8 +A3 > 00A3 +A4 > 00A4 +A6 > 0124 +A7 > 00A7 +A8 > 00A8 +A9 > 0130 +AA > 015E +AB > 011E +AC > 0134 +AD > 00AD +AF > 017B +B0 > 00B0 +B1 > 0127 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 0125 +B7 > 00B7 +B8 > 00B8 +B9 > 0131 +BA > 015F +BB > 011F +BC > 0135 +BD > 00BD +BF > 017C +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 +C4 > 00C4 +C5 > 010A +C6 > 0108 +C7 > 00C7 +C8 > 00C8 +C9 > 00C9 +CA > 00CA +CB > 00CB +CC > 00CC +CD > 00CD +CE > 00CE +CF > 00CF +D1 > 00D1 +D2 > 00D2 +D3 > 00D3 +D4 > 00D4 +D5 > 0120 +D6 > 00D6 +D7 > 00D7 +D8 > 011C +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 016C +DE > 015C +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 +E4 > 00E4 +E5 > 010B +E6 > 0109 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 00EC +ED > 00ED +EE > 00EE +EF > 00EF +F1 > 00F1 +F2 > 00F2 +F3 > 00F3 +F4 > 00F4 +F5 > 0121 +F6 > 00F6 +F7 > 00F7 +F8 > 011D +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 016D +FE > 015D +FF > 02D9 +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-3.cset b/assets/data/iso-8859-3.cset new file mode 100644 index 0000000..21c26a7 --- /dev/null +++ b/assets/data/iso-8859-3.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-3 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 0126 L Y A1 B1 A1 A1 B1 B1 # LATIN CAPITAL LETTER H WITH STROKE +A2 02D8 - Y A2 A2 A2 00 00 00 # BREVE +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 E0A5 . N A5 A5 A5 00 00 00 # <unused> +A6 0124 L Y A6 B6 A6 48 68 68 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 0130 L Y A9 69 A9 49 2A 00 # LATIN CAPITAL LETTER I WITH DOT ABOVE +AA 015E L Y AA BA AA 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA +AB 011E L Y AB BB AB 47 67 67 # LATIN CAPITAL LETTER G WITH BREVE +AC 0134 L Y AC BC AC 4A 6A 6A # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE E0AE . N AE AE AE 00 00 00 # <unused> +AF 017B L Y AF BF AF 5A 7A 7A # LATIN CAPITAL LETTER Z WITH DOT ABOVE +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 0127 L Y A1 B1 A1 B1 B1 B1 # LATIN SMALL LETTER H WITH STROKE +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 0125 L Y A6 B6 A6 68 68 68 # LATIN SMALL LETTER H WITH CIRCUMFLEX +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 0131 L Y 49 B9 49 B9 B9 B9 # LATIN SMALL LETTER DOTLESS I +BA 015F L Y AA BA AA 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA +BB 011F L Y AB BB AB 67 67 67 # LATIN SMALL LETTER G WITH BREVE +BC 0135 L Y AC BC AC 6A 6A 6A # LATIN SMALL LETTER J WITH CIRCUMFLEX +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE E0BE . N BE BE BE 00 00 00 # <unused> +BF 017C L Y AF BF AF 7A 7A 7A # LATIN SMALL LETTER Z WITH DOT ABOVE +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 E0C3 . N C3 C3 C3 00 00 00 # <unused> +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 010A L Y C5 E5 C5 43 63 63 # LATIN CAPITAL LETTER C WITH DOT ABOVE +C6 0108 L Y C6 E6 C6 43 63 63 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 E0D0 . N D0 D0 D0 00 00 00 # <unused> +D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE +D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 0120 L Y D5 F5 D5 47 67 67 # LATIN CAPITAL LETTER G WITH DOT ABOVE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 011C L Y D8 F8 D8 47 67 67 # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 016C L Y DD FD DD 55 2A 00 # LATIN CAPITAL LETTER U WITH BREVE +DE 015C L Y DE FE DE 53 73 73 # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 E0E3 . N E3 E3 E3 00 00 00 # <unused> +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 010B L Y C5 E5 C5 63 63 63 # LATIN SMALL LETTER C WITH DOT ABOVE +E6 0109 L Y C6 E6 C6 63 63 63 # LATIN SMALL LETTER C WITH CIRCUMFLEX +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 E0F0 . N F0 F0 F0 00 00 00 # <unused> +F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE +F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 0121 L Y D5 F5 D5 67 67 67 # LATIN SMALL LETTER G WITH DOT ABOVE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 011D L Y D8 F8 D8 67 67 67 # LATIN SMALL LETTER G WITH CIRCUMFLEX +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 016D L Y DD FD DD 75 2A 00 # LATIN SMALL LETTER U WITH BREVE +FE 015D L Y DE FE DE 73 73 73 # LATIN SMALL LETTER S WITH CIRCUMFLEX +FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE diff --git a/assets/data/iso-8859-4.cmap b/assets/data/iso-8859-4.cmap new file mode 100644 index 0000000..30bc796 --- /dev/null +++ b/assets/data/iso-8859-4.cmap @@ -0,0 +1,1970 @@ +INTERNAL +/ +N 932 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 7 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0304 > C0 + 0308 > C4 + 030A > C5 + 0328 > A1 + . +0042 > 42 +0043 > 43 / + N 1 + 030C > C8 + . +0044 > 44 +0045 > 45 / + N 5 + 0301 > C9 + 0304 > AA + 0307 > CC + 0308 > CB + 0328 > CA + . +0046 > 46 +0047 > 47 / + N 1 + 0327 > AB + . +0048 > 48 +0049 > 49 / + N 5 + 0301 > CD + 0302 > CE + 0303 > A5 + 0304 > CF + 0328 > C7 + . +004A > 4A +004B > 4B / + N 1 + 0327 > D3 + . +004C > 4C / + N 1 + 0327 > A6 + . +004D > 4D +004E > 4E / + N 1 + 0327 > D1 + . +004F > 4F / + N 4 + 0302 > D4 + 0303 > D5 + 0304 > D2 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 1 + 0327 > A3 + . +0053 > 53 / + N 1 + 030C > A9 + . +0054 > 54 +0055 > 55 / + N 6 + 0301 > DA + 0302 > DB + 0303 > DD + 0304 > DE + 0308 > DC + 0328 > D9 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A / + N 1 + 030C > AE + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 7 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0304 > E0 + 0308 > E4 + 030A > E5 + 0328 > B1 + . +0062 > 62 +0063 > 63 / + N 1 + 030C > E8 + . +0064 > 64 +0065 > 65 / + N 5 + 0301 > E9 + 0304 > BA + 0307 > EC + 0308 > EB + 0328 > EA + . +0066 > 66 +0067 > 67 / + N 1 + 0327 > BB + . +0068 > 68 +0069 > 69 / + N 5 + 0301 > ED + 0302 > EE + 0303 > B5 + 0304 > EF + 0328 > E7 + . +006A > 6A +006B > 6B / + N 1 + 0327 > F3 + . +006C > 6C / + N 1 + 0327 > B6 + . +006D > 6D +006E > 6E / + N 1 + 0327 > F1 + . +006F > 6F / + N 4 + 0302 > F4 + 0303 > F5 + 0304 > F2 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 1 + 0327 > B3 + . +0073 > 73 / + N 1 + 030C > B9 + . +0074 > 74 +0075 > 75 / + N 6 + 0301 > FA + 0302 > FB + 0303 > FD + 0304 > FE + 0308 > FC + 0328 > F9 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A / + N 1 + 030C > BE + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A4 > A4 +00A7 > A7 +00A8 > A8 +00AD > AD +00AF > AF +00B0 > B0 +00B4 > B4 +00B8 > B8 +00C0 > 41 # unsup: 0041 0300 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > C9 +00CA > 45 # unsup: 0045 0302 +00CB > CB +00CC > 49 # unsup: 0049 0300 +00CD > CD +00CE > CE +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > 55 # unsup: 0055 0300 +00DA > DA +00DB > DB +00DC > DC +00DD > 59 # unsup: 0059 0301 +00DF > DF +00E0 > 61 # unsup: 0061 0300 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > E9 +00EA > 65 # unsup: 0065 0302 +00EB > EB +00EC > 69 # unsup: 0069 0300 +00ED > ED +00EE > EE +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > 75 # unsup: 0075 0300 +00FA > FA +00FB > FB +00FC > FC +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > C0 +0101 > E0 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > A1 +0105 > B1 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > C8 +010D > E8 +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0110 > D0 +0111 > F0 +0112 > AA +0113 > BA +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > CC +0117 > EC +0118 > CA +0119 > EA +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > AB +0123 > BB +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > A5 +0129 > B5 +012A > CF +012B > EF +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > C7 +012F > E7 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > D3 +0137 > F3 +0138 > A2 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > A6 +013C > B6 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > D1 +0146 > F1 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014A > BD +014B > BF +014C > D2 +014D > F2 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > A3 +0157 > B3 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > A9 +0161 > B9 +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0166 > AC +0167 > BC +0168 > DD +0169 > FD +016A > DE +016B > FE +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > D9 +0173 > F9 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > AE +017E > BE +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 AE # compat +01C5 > 44 BE # compat +01C6 > 64 BE # compat +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +01FE > D8 # unsup: 00D8 0301 +01FF > F8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +02C7 > B7 +02D9 > FF +02DB > B2 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > AA # unsup: 0112 0300 +1E15 > BA # unsup: 0113 0300 +1E16 > AA # unsup: 0112 0301 +1E17 > BA # unsup: 0113 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > D2 # unsup: 014C 0300 +1E51 > F2 # unsup: 014D 0300 +1E52 > D2 # unsup: 014C 0301 +1E53 > F2 # unsup: 014D 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > A9 # unsup: 0160 0307 +1E67 > B9 # unsup: 0161 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > DD # unsup: 0168 0301 +1E79 > FD # unsup: 0169 0301 +1E7A > DE # unsup: 016A 0308 +1E7B > FE # unsup: 016B 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE3 > AF # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 7 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0304 > C0 + 0308 > C4 + 030A > C5 + 0328 > A1 + . +0042 > 42 +0043 > 43 / + N 1 + 030C > C8 + . +0044 > 44 +0045 > 45 / + N 5 + 0301 > C9 + 0304 > AA + 0307 > CC + 0308 > CB + 0328 > CA + . +0046 > 46 +0047 > 47 / + N 1 + 0327 > AB + . +0048 > 48 +0049 > 49 / + N 5 + 0301 > CD + 0302 > CE + 0303 > A5 + 0304 > CF + 0328 > C7 + . +004A > 4A +004B > 4B / + N 1 + 0327 > D3 + . +004C > 4C / + N 1 + 0327 > A6 + . +004D > 4D +004E > 4E / + N 1 + 0327 > D1 + . +004F > 4F / + N 4 + 0302 > D4 + 0303 > D5 + 0304 > D2 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 / + N 1 + 0327 > A3 + . +0053 > 53 / + N 1 + 030C > A9 + . +0054 > 54 +0055 > 55 / + N 6 + 0301 > DA + 0302 > DB + 0303 > DD + 0304 > DE + 0308 > DC + 0328 > D9 + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A / + N 1 + 030C > AE + . +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 7 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0304 > E0 + 0308 > E4 + 030A > E5 + 0328 > B1 + . +0062 > 62 +0063 > 63 / + N 1 + 030C > E8 + . +0064 > 64 +0065 > 65 / + N 5 + 0301 > E9 + 0304 > BA + 0307 > EC + 0308 > EB + 0328 > EA + . +0066 > 66 +0067 > 67 / + N 1 + 0327 > BB + . +0068 > 68 +0069 > 69 / + N 5 + 0301 > ED + 0302 > EE + 0303 > B5 + 0304 > EF + 0328 > E7 + . +006A > 6A +006B > 6B / + N 1 + 0327 > F3 + . +006C > 6C / + N 1 + 0327 > B6 + . +006D > 6D +006E > 6E / + N 1 + 0327 > F1 + . +006F > 6F / + N 4 + 0302 > F4 + 0303 > F5 + 0304 > F2 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 / + N 1 + 0327 > B3 + . +0073 > 73 / + N 1 + 030C > B9 + . +0074 > 74 +0075 > 75 / + N 6 + 0301 > FA + 0302 > FB + 0303 > FD + 0304 > FE + 0308 > FC + 0328 > F9 + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A / + N 1 + 030C > BE + . +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A4 > A4 +00A7 > A7 +00A8 > A8 +00AD > AD +00AF > AF +00B0 > B0 +00B4 > B4 +00B8 > B8 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C9 > C9 +00CB > CB +00CD > CD +00CE > CE +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00DA > DA +00DB > DB +00DC > DC +00DF > DF +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E9 > E9 +00EB > EB +00ED > ED +00EE > EE +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00FA > FA +00FB > FB +00FC > FC +0100 > C0 +0101 > E0 +0104 > A1 +0105 > B1 +010C > C8 +010D > E8 +0110 > D0 +0111 > F0 +0112 > AA +0113 > BA +0116 > CC +0117 > EC +0118 > CA +0119 > EA +0122 > AB +0123 > BB +0128 > A5 +0129 > B5 +012A > CF +012B > EF +012E > C7 +012F > E7 +0136 > D3 +0137 > F3 +0138 > A2 +013B > A6 +013C > B6 +0145 > D1 +0146 > F1 +014A > BD +014B > BF +014C > D2 +014D > F2 +0156 > A3 +0157 > B3 +0160 > A9 +0161 > B9 +0166 > AC +0167 > BC +0168 > DD +0169 > FD +016A > DE +016B > FE +0172 > D9 +0173 > F9 +017D > AE +017E > BE +02C7 > B7 +02D9 > FF +02DB > B2 +037E > 3B +1FEF > 60 +1FFD > B4 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0041 0328 +A2 > 0138 +A3 > 0052 0327 +A4 > 00A4 +A5 > 0049 0303 +A6 > 004C 0327 +A7 > 00A7 +A8 > 00A8 +A9 > 0053 030C +AA > 0045 0304 +AB > 0047 0327 +AC > 0166 +AD > 00AD +AE > 005A 030C +AF > 00AF +B0 > 00B0 +B1 > 0061 0328 +B2 > 02DB +B3 > 0072 0327 +B4 > 00B4 +B5 > 0069 0303 +B6 > 006C 0327 +B7 > 02C7 +B8 > 00B8 +B9 > 0073 030C +BA > 0065 0304 +BB > 0067 0327 +BC > 0167 +BD > 014A +BE > 007A 030C +BF > 014B +C0 > 0041 0304 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0303 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0049 0328 +C8 > 0043 030C +C9 > 0045 0301 +CA > 0045 0328 +CB > 0045 0308 +CC > 0045 0307 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0304 +D0 > 0110 +D1 > 004E 0327 +D2 > 004F 0304 +D3 > 004B 0327 +D4 > 004F 0302 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 00D7 +D8 > 00D8 +D9 > 0055 0328 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0055 0303 +DE > 0055 0304 +DF > 00DF +E0 > 0061 0304 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0303 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0069 0328 +E8 > 0063 030C +E9 > 0065 0301 +EA > 0065 0328 +EB > 0065 0308 +EC > 0065 0307 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0304 +F0 > 0111 +F1 > 006E 0327 +F2 > 006F 0304 +F3 > 006B 0327 +F4 > 006F 0302 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 00F7 +F8 > 00F8 +F9 > 0075 0328 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0075 0303 +FE > 0075 0304 +FF > 02D9 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0104 +A2 > 0138 +A3 > 0156 +A4 > 00A4 +A5 > 0128 +A6 > 013B +A7 > 00A7 +A8 > 00A8 +A9 > 0160 +AA > 0112 +AB > 0122 +AC > 0166 +AD > 00AD +AE > 017D +AF > 00AF +B0 > 00B0 +B1 > 0105 +B2 > 02DB +B3 > 0157 +B4 > 00B4 +B5 > 0129 +B6 > 013C +B7 > 02C7 +B8 > 00B8 +B9 > 0161 +BA > 0113 +BB > 0123 +BC > 0167 +BD > 014A +BE > 017E +BF > 014B +C0 > 0100 +C1 > 00C1 +C2 > 00C2 +C3 > 00C3 +C4 > 00C4 +C5 > 00C5 +C6 > 00C6 +C7 > 012E +C8 > 010C +C9 > 00C9 +CA > 0118 +CB > 00CB +CC > 0116 +CD > 00CD +CE > 00CE +CF > 012A +D0 > 0110 +D1 > 0145 +D2 > 014C +D3 > 0136 +D4 > 00D4 +D5 > 00D5 +D6 > 00D6 +D7 > 00D7 +D8 > 00D8 +D9 > 0172 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 0168 +DE > 016A +DF > 00DF +E0 > 0101 +E1 > 00E1 +E2 > 00E2 +E3 > 00E3 +E4 > 00E4 +E5 > 00E5 +E6 > 00E6 +E7 > 012F +E8 > 010D +E9 > 00E9 +EA > 0119 +EB > 00EB +EC > 0117 +ED > 00ED +EE > 00EE +EF > 012B +F0 > 0111 +F1 > 0146 +F2 > 014D +F3 > 0137 +F4 > 00F4 +F5 > 00F5 +F6 > 00F6 +F7 > 00F7 +F8 > 00F8 +F9 > 0173 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 0169 +FE > 016B +FF > 02D9 +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-4.cset b/assets/data/iso-8859-4.cset new file mode 100644 index 0000000..5da17b7 --- /dev/null +++ b/assets/data/iso-8859-4.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-4 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 0104 L Y A1 B1 A1 41 2A 00 # LATIN CAPITAL LETTER A WITH OGONEK +A2 0138 L Y A2 A2 A2 A2 A2 A2 # LATIN SMALL LETTER KRA +A3 0156 L Y A3 B3 A3 52 72 72 # LATIN CAPITAL LETTER R WITH CEDILLA +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 0128 L Y A5 B5 A5 49 2A 00 # LATIN CAPITAL LETTER I WITH TILDE +A6 013B L Y A6 B6 A6 4C 6C 6C # LATIN CAPITAL LETTER L WITH CEDILLA +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 0160 L Y A9 B9 A9 53 73 73 # LATIN CAPITAL LETTER S WITH CARON +AA 0112 L Y AA BA AA 45 2A 00 # LATIN CAPITAL LETTER E WITH MACRON +AB 0122 L Y AB BB AB 47 67 67 # LATIN CAPITAL LETTER G WITH CEDILLA +AC 0166 L Y AC BC AC AC BC BC # LATIN CAPITAL LETTER T WITH STROKE +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 017D L Y AE BE AE 5A 7A 7A # LATIN CAPITAL LETTER Z WITH CARON +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 0105 L Y A1 B1 A1 61 2A 00 # LATIN SMALL LETTER A WITH OGONEK +B2 02DB - Y B2 B2 B2 00 00 00 # OGONEK +B3 0157 L Y A3 B3 A3 72 72 72 # LATIN SMALL LETTER R WITH CEDILLA +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 0129 L Y A5 B5 A5 69 2A 00 # LATIN SMALL LETTER I WITH TILDE +B6 013C L Y A6 B6 A6 6C 6C 6C # LATIN SMALL LETTER L WITH CEDILLA +B7 02C7 M Y B7 B7 B7 00 00 00 # CARON +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 0161 L Y A9 B9 A9 73 73 73 # LATIN SMALL LETTER S WITH CARON +BA 0113 L Y AA BA AA 65 2A 00 # LATIN SMALL LETTER E WITH MACRON +BB 0123 L Y AB BB AB 67 67 67 # LATIN SMALL LETTER G WITH CEDILLA +BC 0167 L Y AC BC AC BC BC BC # LATIN SMALL LETTER T WITH STROKE +BD 014A L Y BD BF BD BD BF BF # LATIN CAPITAL LETTER ENG +BE 017E L Y AE BE AE 7A 7A 7A # LATIN SMALL LETTER Z WITH CARON +BF 014B L Y BD BF BD BF BF BF # LATIN SMALL LETTER ENG +C0 0100 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH MACRON +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 012E L Y C7 E7 C7 49 2A 00 # LATIN CAPITAL LETTER I WITH OGONEK +C8 010C L Y C8 E8 C8 43 63 63 # LATIN CAPITAL LETTER C WITH CARON +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 0118 L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH OGONEK +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 0116 L Y CC EC CC 45 2A 00 # LATIN CAPITAL LETTER E WITH DOT ABOVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 012A L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH MACRON +D0 0110 L Y D0 F0 D0 D0 F0 F0 # LATIN CAPITAL LETTER D WITH STROKE +D1 0145 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH CEDILLA +D2 014C L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH MACRON +D3 0136 L Y D3 F3 D3 4B 6B 6B # LATIN CAPITAL LETTER K WITH CEDILLA +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 0172 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH OGONEK +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 0168 L Y DD FD DD 55 2A 00 # LATIN CAPITAL LETTER U WITH TILDE +DE 016A L Y DE FE DE 55 2A 00 # LATIN CAPITAL LETTER U WITH MACRON +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 0101 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH MACRON +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 012F L Y C7 E7 C7 69 2A 00 # LATIN SMALL LETTER I WITH OGONEK +E8 010D L Y C8 E8 C8 63 63 63 # LATIN SMALL LETTER C WITH CARON +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 0119 L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH OGONEK +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 0117 L Y CC EC CC 65 2A 00 # LATIN SMALL LETTER E WITH DOT ABOVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 012B L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH MACRON +F0 0111 L Y D0 F0 D0 F0 F0 F0 # LATIN SMALL LETTER D WITH STROKE +F1 0146 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH CEDILLA +F2 014D L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH MACRON +F3 0137 L Y D3 F3 D3 6B 6B 6B # LATIN SMALL LETTER K WITH CEDILLA +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 0173 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH OGONEK +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 0169 L Y DD FD DD 75 2A 00 # LATIN SMALL LETTER U WITH TILDE +FE 016B L Y DE FE DE 75 2A 00 # LATIN SMALL LETTER U WITH MACRON +FF 02D9 - Y FF FF FF 00 00 00 # DOT ABOVE diff --git a/assets/data/iso-8859-5.cmap b/assets/data/iso-8859-5.cmap new file mode 100644 index 0000000..cdd6473 --- /dev/null +++ b/assets/data/iso-8859-5.cmap @@ -0,0 +1,1895 @@ +INTERNAL +/ +N 1030 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A7 > FD +00AD > AD +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0400 > B5 # unsup: 0415 0300 +0401 > A1 +0402 > A2 +0403 > A3 +0404 > A4 +0405 > A5 +0406 > A6 / + N 1 + 0308 > A7 + . +0407 > A7 +0408 > A8 +0409 > A9 +040A > AA +040B > AB +040C > AC +040D > B8 # unsup: 0418 0300 +040E > AE +040F > AF +0410 > B0 +0411 > B1 +0412 > B2 +0413 > B3 / + N 1 + 0301 > A3 + . +0414 > B4 +0415 > B5 / + N 1 + 0308 > A1 + . +0416 > B6 +0417 > B7 +0418 > B8 / + N 1 + 0306 > B9 + . +0419 > B9 +041A > BA / + N 1 + 0301 > AC + . +041B > BB +041C > BC +041D > BD +041E > BE +041F > BF +0420 > C0 +0421 > C1 +0422 > C2 +0423 > C3 / + N 1 + 0306 > AE + . +0424 > C4 +0425 > C5 +0426 > C6 +0427 > C7 +0428 > C8 +0429 > C9 +042A > CA +042B > CB +042C > CC +042D > CD +042E > CE +042F > CF +0430 > D0 +0431 > D1 +0432 > D2 +0433 > D3 / + N 1 + 0301 > F3 + . +0434 > D4 +0435 > D5 / + N 1 + 0308 > F1 + . +0436 > D6 +0437 > D7 +0438 > D8 / + N 1 + 0306 > D9 + . +0439 > D9 +043A > DA / + N 1 + 0301 > FC + . +043B > DB +043C > DC +043D > DD +043E > DE +043F > DF +0440 > E0 +0441 > E1 +0442 > E2 +0443 > E3 / + N 1 + 0306 > FE + . +0444 > E4 +0445 > E5 +0446 > E6 +0447 > E7 +0448 > E8 +0449 > E9 +044A > EA +044B > EB +044C > EC +044D > ED +044E > EE +044F > EF +0450 > D5 # unsup: 0435 0300 +0451 > F1 +0452 > F2 +0453 > F3 +0454 > F4 +0455 > F5 +0456 > F6 / + N 1 + 0308 > F7 + . +0457 > F7 +0458 > F8 +0459 > F9 +045A > FA +045B > FB +045C > FC +045D > D8 # unsup: 0438 0300 +045E > FE +045F > FF +04C1 > B6 # unsup: 0416 0306 +04C2 > D6 # unsup: 0436 0306 +04D0 > B0 # unsup: 0410 0306 +04D1 > D0 # unsup: 0430 0306 +04D2 > B0 # unsup: 0410 0308 +04D3 > D0 # unsup: 0430 0308 +04D6 > B5 # unsup: 0415 0306 +04D7 > D5 # unsup: 0435 0306 +04DC > B6 # unsup: 0416 0308 +04DD > D6 # unsup: 0436 0308 +04DE > B7 # unsup: 0417 0308 +04DF > D7 # unsup: 0437 0308 +04E2 > B8 # unsup: 0418 0304 +04E3 > D8 # unsup: 0438 0304 +04E4 > B8 # unsup: 0418 0308 +04E5 > D8 # unsup: 0438 0308 +04E6 > BE # unsup: 041E 0308 +04E7 > DE # unsup: 043E 0308 +04EC > CD # unsup: 042D 0308 +04ED > ED # unsup: 044D 0308 +04EE > C3 # unsup: 0423 0304 +04EF > E3 # unsup: 0443 0304 +04F0 > C3 # unsup: 0423 0308 +04F1 > E3 # unsup: 0443 0308 +04F2 > C3 # unsup: 0423 030B +04F3 > E3 # unsup: 0443 030B +04F4 > C7 # unsup: 0427 0308 +04F5 > E7 # unsup: 0447 0308 +04F8 > CB # unsup: 042B 0308 +04F9 > EB # unsup: 044B 0308 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +2116 > F0 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +. + +STRICT +/ +N 258 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A7 > FD +00AD > AD +037E > 3B +0401 > A1 +0402 > A2 +0403 > A3 +0404 > A4 +0405 > A5 +0406 > A6 / + N 1 + 0308 > A7 + . +0407 > A7 +0408 > A8 +0409 > A9 +040A > AA +040B > AB +040C > AC +040E > AE +040F > AF +0410 > B0 +0411 > B1 +0412 > B2 +0413 > B3 / + N 1 + 0301 > A3 + . +0414 > B4 +0415 > B5 / + N 1 + 0308 > A1 + . +0416 > B6 +0417 > B7 +0418 > B8 / + N 1 + 0306 > B9 + . +0419 > B9 +041A > BA / + N 1 + 0301 > AC + . +041B > BB +041C > BC +041D > BD +041E > BE +041F > BF +0420 > C0 +0421 > C1 +0422 > C2 +0423 > C3 / + N 1 + 0306 > AE + . +0424 > C4 +0425 > C5 +0426 > C6 +0427 > C7 +0428 > C8 +0429 > C9 +042A > CA +042B > CB +042C > CC +042D > CD +042E > CE +042F > CF +0430 > D0 +0431 > D1 +0432 > D2 +0433 > D3 / + N 1 + 0301 > F3 + . +0434 > D4 +0435 > D5 / + N 1 + 0308 > F1 + . +0436 > D6 +0437 > D7 +0438 > D8 / + N 1 + 0306 > D9 + . +0439 > D9 +043A > DA / + N 1 + 0301 > FC + . +043B > DB +043C > DC +043D > DD +043E > DE +043F > DF +0440 > E0 +0441 > E1 +0442 > E2 +0443 > E3 / + N 1 + 0306 > FE + . +0444 > E4 +0445 > E5 +0446 > E6 +0447 > E7 +0448 > E8 +0449 > E9 +044A > EA +044B > EB +044C > EC +044D > ED +044E > EE +044F > EF +0451 > F1 +0452 > F2 +0453 > F3 +0454 > F4 +0455 > F5 +0456 > F6 / + N 1 + 0308 > F7 + . +0457 > F7 +0458 > F8 +0459 > F9 +045A > FA +045B > FB +045C > FC +045E > FE +045F > FF +1FEF > 60 +2116 > F0 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0415 0308 +A2 > 0402 +A3 > 0413 0301 +A4 > 0404 +A5 > 0405 +A6 > 0406 +A7 > 0406 0308 +A8 > 0408 +A9 > 0409 +AA > 040A +AB > 040B +AC > 041A 0301 +AD > 00AD +AE > 0423 0306 +AF > 040F +B0 > 0410 +B1 > 0411 +B2 > 0412 +B3 > 0413 +B4 > 0414 +B5 > 0415 +B6 > 0416 +B7 > 0417 +B8 > 0418 +B9 > 0418 0306 +BA > 041A +BB > 041B +BC > 041C +BD > 041D +BE > 041E +BF > 041F +C0 > 0420 +C1 > 0421 +C2 > 0422 +C3 > 0423 +C4 > 0424 +C5 > 0425 +C6 > 0426 +C7 > 0427 +C8 > 0428 +C9 > 0429 +CA > 042A +CB > 042B +CC > 042C +CD > 042D +CE > 042E +CF > 042F +D0 > 0430 +D1 > 0431 +D2 > 0432 +D3 > 0433 +D4 > 0434 +D5 > 0435 +D6 > 0436 +D7 > 0437 +D8 > 0438 +D9 > 0438 0306 +DA > 043A +DB > 043B +DC > 043C +DD > 043D +DE > 043E +DF > 043F +E0 > 0440 +E1 > 0441 +E2 > 0442 +E3 > 0443 +E4 > 0444 +E5 > 0445 +E6 > 0446 +E7 > 0447 +E8 > 0448 +E9 > 0449 +EA > 044A +EB > 044B +EC > 044C +ED > 044D +EE > 044E +EF > 044F +F0 > 2116 +F1 > 0435 0308 +F2 > 0452 +F3 > 0433 0301 +F4 > 0454 +F5 > 0455 +F6 > 0456 +F7 > 0456 0308 +F8 > 0458 +F9 > 0459 +FA > 045A +FB > 045B +FC > 043A 0301 +FD > 00A7 +FE > 0443 0306 +FF > 045F +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 0401 +A2 > 0402 +A3 > 0403 +A4 > 0404 +A5 > 0405 +A6 > 0406 +A7 > 0407 +A8 > 0408 +A9 > 0409 +AA > 040A +AB > 040B +AC > 040C +AD > 00AD +AE > 040E +AF > 040F +B0 > 0410 +B1 > 0411 +B2 > 0412 +B3 > 0413 +B4 > 0414 +B5 > 0415 +B6 > 0416 +B7 > 0417 +B8 > 0418 +B9 > 0419 +BA > 041A +BB > 041B +BC > 041C +BD > 041D +BE > 041E +BF > 041F +C0 > 0420 +C1 > 0421 +C2 > 0422 +C3 > 0423 +C4 > 0424 +C5 > 0425 +C6 > 0426 +C7 > 0427 +C8 > 0428 +C9 > 0429 +CA > 042A +CB > 042B +CC > 042C +CD > 042D +CE > 042E +CF > 042F +D0 > 0430 +D1 > 0431 +D2 > 0432 +D3 > 0433 +D4 > 0434 +D5 > 0435 +D6 > 0436 +D7 > 0437 +D8 > 0438 +D9 > 0439 +DA > 043A +DB > 043B +DC > 043C +DD > 043D +DE > 043E +DF > 043F +E0 > 0440 +E1 > 0441 +E2 > 0442 +E3 > 0443 +E4 > 0444 +E5 > 0445 +E6 > 0446 +E7 > 0447 +E8 > 0448 +E9 > 0449 +EA > 044A +EB > 044B +EC > 044C +ED > 044D +EE > 044E +EF > 044F +F0 > 2116 +F1 > 0451 +F2 > 0452 +F3 > 0453 +F4 > 0454 +F5 > 0455 +F6 > 0456 +F7 > 0457 +F8 > 0458 +F9 > 0459 +FA > 045A +FB > 045B +FC > 045C +FD > 00A7 +FE > 045E +FF > 045F +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-5.cset b/assets/data/iso-8859-5.cset new file mode 100644 index 0000000..a940d38 --- /dev/null +++ b/assets/data/iso-8859-5.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-5 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 0401 L Y A1 F1 A1 A1 F1 F1 # CYRILLIC CAPITAL LETTER IO +A2 0402 L Y A2 F2 A2 A2 F2 F2 # CYRILLIC CAPITAL LETTER DJE +A3 0403 L Y A3 F3 A3 A3 F3 F3 # CYRILLIC CAPITAL LETTER GJE +A4 0404 L Y A4 F4 A4 A4 F4 F4 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +A5 0405 L Y A5 F5 A5 A5 F5 F5 # CYRILLIC CAPITAL LETTER DZE +A6 0406 L Y A6 F6 A6 A6 F6 F6 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +A7 0407 L Y A7 F7 A7 A7 F7 F7 # CYRILLIC CAPITAL LETTER YI +A8 0408 L Y A8 F8 A8 A8 F8 F8 # CYRILLIC CAPITAL LETTER JE +A9 0409 L Y A9 F9 A9 A9 F9 F9 # CYRILLIC CAPITAL LETTER LJE +AA 040A L Y AA FA AA AA FA FA # CYRILLIC CAPITAL LETTER NJE +AB 040B L Y AB FB AB AB FB FB # CYRILLIC CAPITAL LETTER TSHE +AC 040C L Y AC FC AC AC FC FC # CYRILLIC CAPITAL LETTER KJE +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 040E L Y AE FE AE AE FE FE # CYRILLIC CAPITAL LETTER SHORT U +AF 040F L Y AF FF AF AF FF FF # CYRILLIC CAPITAL LETTER DZHE +B0 0410 L Y B0 D0 B0 B0 2A 00 # CYRILLIC CAPITAL LETTER A +B1 0411 L Y B1 D1 B1 B1 D1 D1 # CYRILLIC CAPITAL LETTER BE +B2 0412 L Y B2 D2 B2 B2 D2 D2 # CYRILLIC CAPITAL LETTER VE +B3 0413 L Y B3 D3 B3 B3 D3 D3 # CYRILLIC CAPITAL LETTER GHE +B4 0414 L Y B4 D4 B4 B4 D4 D4 # CYRILLIC CAPITAL LETTER DE +B5 0415 L Y B5 D5 B5 B5 2A 00 # CYRILLIC CAPITAL LETTER IE +B6 0416 L Y B6 D6 B6 B6 D6 D6 # CYRILLIC CAPITAL LETTER ZHE +B7 0417 L Y B7 D7 B7 B7 D7 D7 # CYRILLIC CAPITAL LETTER ZE +B8 0418 L Y B8 D8 B8 B8 2A 00 # CYRILLIC CAPITAL LETTER I +B9 0419 L Y B9 D9 B9 B9 D9 D9 # CYRILLIC CAPITAL LETTER SHORT I +BA 041A L Y BA DA BA BA DA DA # CYRILLIC CAPITAL LETTER KA +BB 041B L Y BB DB BB BB DB DB # CYRILLIC CAPITAL LETTER EL +BC 041C L Y BC DC BC BC DC DC # CYRILLIC CAPITAL LETTER EM +BD 041D L Y BD DD BD BD DD DD # CYRILLIC CAPITAL LETTER EN +BE 041E L Y BE DE BE BE 2A 00 # CYRILLIC CAPITAL LETTER O +BF 041F L Y BF DF BF BF DF DF # CYRILLIC CAPITAL LETTER PE +C0 0420 L Y C0 E0 C0 C0 E0 E0 # CYRILLIC CAPITAL LETTER ER +C1 0421 L Y C1 E1 C1 C1 E1 E1 # CYRILLIC CAPITAL LETTER ES +C2 0422 L Y C2 E2 C2 C2 E2 E2 # CYRILLIC CAPITAL LETTER TE +C3 0423 L Y C3 E3 C3 C3 2A 00 # CYRILLIC CAPITAL LETTER U +C4 0424 L Y C4 E4 C4 C4 E4 E4 # CYRILLIC CAPITAL LETTER EF +C5 0425 L Y C5 E5 C5 C5 E5 E5 # CYRILLIC CAPITAL LETTER HA +C6 0426 L Y C6 E6 C6 C6 E6 E6 # CYRILLIC CAPITAL LETTER TSE +C7 0427 L Y C7 E7 C7 C7 E7 E7 # CYRILLIC CAPITAL LETTER CHE +C8 0428 L Y C8 E8 C8 C8 E8 E8 # CYRILLIC CAPITAL LETTER SHA +C9 0429 L Y C9 E9 C9 C9 E9 E9 # CYRILLIC CAPITAL LETTER SHCHA +CA 042A L Y CA EA CA CA EA EA # CYRILLIC CAPITAL LETTER HARD SIGN +CB 042B L Y CB EB CB CB 2A 00 # CYRILLIC CAPITAL LETTER YERU +CC 042C L Y CC EC CC CC EC EC # CYRILLIC CAPITAL LETTER SOFT SIGN +CD 042D L Y CD ED CD CD 2A 00 # CYRILLIC CAPITAL LETTER E +CE 042E L Y CE EE CE CE 2A 00 # CYRILLIC CAPITAL LETTER YU +CF 042F L Y CF EF CF CF 2A 00 # CYRILLIC CAPITAL LETTER YA +D0 0430 L Y B0 D0 B0 D0 2A 00 # CYRILLIC SMALL LETTER A +D1 0431 L Y B1 D1 B1 D1 D1 D1 # CYRILLIC SMALL LETTER BE +D2 0432 L Y B2 D2 B2 D2 D2 D2 # CYRILLIC SMALL LETTER VE +D3 0433 L Y B3 D3 B3 D3 D3 D3 # CYRILLIC SMALL LETTER GHE +D4 0434 L Y B4 D4 B4 D4 D4 D4 # CYRILLIC SMALL LETTER DE +D5 0435 L Y B5 D5 B5 D5 2A 00 # CYRILLIC SMALL LETTER IE +D6 0436 L Y B6 D6 B6 D6 D6 D6 # CYRILLIC SMALL LETTER ZHE +D7 0437 L Y B7 D7 B7 D7 D7 D7 # CYRILLIC SMALL LETTER ZE +D8 0438 L Y B8 D8 B8 D8 2A 00 # CYRILLIC SMALL LETTER I +D9 0439 L Y B9 D9 B9 D9 D9 D9 # CYRILLIC SMALL LETTER SHORT I +DA 043A L Y BA DA BA DA DA DA # CYRILLIC SMALL LETTER KA +DB 043B L Y BB DB BB DB DB DB # CYRILLIC SMALL LETTER EL +DC 043C L Y BC DC BC DC DC DC # CYRILLIC SMALL LETTER EM +DD 043D L Y BD DD BD DD DD DD # CYRILLIC SMALL LETTER EN +DE 043E L Y BE DE BE DE 2A 00 # CYRILLIC SMALL LETTER O +DF 043F L Y BF DF BF DF DF DF # CYRILLIC SMALL LETTER PE +E0 0440 L Y C0 E0 C0 E0 E0 E0 # CYRILLIC SMALL LETTER ER +E1 0441 L Y C1 E1 C1 E1 E1 E1 # CYRILLIC SMALL LETTER ES +E2 0442 L Y C2 E2 C2 E2 E2 E2 # CYRILLIC SMALL LETTER TE +E3 0443 L Y C3 E3 C3 E3 2A 00 # CYRILLIC SMALL LETTER U +E4 0444 L Y C4 E4 C4 E4 E4 E4 # CYRILLIC SMALL LETTER EF +E5 0445 L Y C5 E5 C5 E5 E5 E5 # CYRILLIC SMALL LETTER HA +E6 0446 L Y C6 E6 C6 E6 E6 E6 # CYRILLIC SMALL LETTER TSE +E7 0447 L Y C7 E7 C7 E7 E7 E7 # CYRILLIC SMALL LETTER CHE +E8 0448 L Y C8 E8 C8 E8 E8 E8 # CYRILLIC SMALL LETTER SHA +E9 0449 L Y C9 E9 C9 E9 E9 E9 # CYRILLIC SMALL LETTER SHCHA +EA 044A L Y CA EA CA EA EA EA # CYRILLIC SMALL LETTER HARD SIGN +EB 044B L Y CB EB CB EB 2A 00 # CYRILLIC SMALL LETTER YERU +EC 044C L Y CC EC CC EC EC EC # CYRILLIC SMALL LETTER SOFT SIGN +ED 044D L Y CD ED CD ED 2A 00 # CYRILLIC SMALL LETTER E +EE 044E L Y CE EE CE EE 2A 00 # CYRILLIC SMALL LETTER YU +EF 044F L Y CF EF CF EF 2A 00 # CYRILLIC SMALL LETTER YA +F0 2116 . N F0 F0 F0 00 00 00 # <unused special> +F1 0451 L Y A1 F1 A1 F1 F1 F1 # CYRILLIC SMALL LETTER IO +F2 0452 L Y A2 F2 A2 F2 F2 F2 # CYRILLIC SMALL LETTER DJE +F3 0453 L Y A3 F3 A3 F3 F3 F3 # CYRILLIC SMALL LETTER GJE +F4 0454 L Y A4 F4 A4 F4 F4 F4 # CYRILLIC SMALL LETTER UKRAINIAN IE +F5 0455 L Y A5 F5 A5 F5 F5 F5 # CYRILLIC SMALL LETTER DZE +F6 0456 L Y A6 F6 A6 F6 F6 F6 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +F7 0457 L Y A7 F7 A7 F7 F7 F7 # CYRILLIC SMALL LETTER YI +F8 0458 L Y A8 F8 A8 F8 F8 F8 # CYRILLIC SMALL LETTER JE +F9 0459 L Y A9 F9 A9 F9 F9 F9 # CYRILLIC SMALL LETTER LJE +FA 045A L Y AA FA AA FA FA FA # CYRILLIC SMALL LETTER NJE +FB 045B L Y AB FB AB FB FB FB # CYRILLIC SMALL LETTER TSHE +FC 045C L Y AC FC AC FC FC FC # CYRILLIC SMALL LETTER KJE +FD 00A7 - Y FD FD FD 00 00 00 # SECTION SIGN +FE 045E L Y AE FE AE FE FE FE # CYRILLIC SMALL LETTER SHORT U +FF 045F L Y AF FF AF FF FF FF # CYRILLIC SMALL LETTER DZHE diff --git a/assets/data/iso-8859-6.cmap b/assets/data/iso-8859-6.cmap new file mode 100644 index 0000000..bbb7b8a --- /dev/null +++ b/assets/data/iso-8859-6.cmap @@ -0,0 +1,2201 @@ +INTERNAL +/ +N 1521 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A4 > A4 +00AD > AD +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +060C > AC +061B > BB +061F > BF +0621 > C1 +0622 > C2 +0623 > C3 +0624 > C4 +0625 > C5 +0626 > C6 +0627 > C7 / + N 3 + 0653 > C2 + 0654 > C3 + 0655 > C5 + . +0628 > C8 +0629 > C9 +062A > CA +062B > CB +062C > CC +062D > CD +062E > CE +062F > CF +0630 > D0 +0631 > D1 +0632 > D2 +0633 > D3 +0634 > D4 +0635 > D5 +0636 > D6 +0637 > D7 +0638 > D8 +0639 > D9 +063A > DA +0640 > E0 +0641 > E1 +0642 > E2 +0643 > E3 +0644 > E4 +0645 > E5 +0646 > E6 +0647 > E7 +0648 > E8 / + N 1 + 0654 > C4 + . +0649 > E9 +064A > EA / + N 1 + 0654 > C6 + . +064B > EB +064C > EC +064D > ED +064E > EE +064F > EF +0650 > F0 +0651 > F1 +0652 > F2 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FBE8 > E9 # compat +FBE9 > E9 # compat +FBEA > C6 C7 # compat +FBEB > C6 C7 # compat +FBEE > C6 E8 # compat +FBEF > C6 E8 # compat +FBF9 > C6 E9 # compat +FBFA > C6 E9 # compat +FBFB > C6 E9 # compat +FC00 > C6 CC # compat +FC01 > C6 CD # compat +FC02 > C6 E5 # compat +FC03 > C6 E9 # compat +FC04 > C6 EA # compat +FC05 > C8 CC # compat +FC06 > C8 CD # compat +FC07 > C8 CE # compat +FC08 > C8 E5 # compat +FC09 > C8 E9 # compat +FC0A > C8 EA # compat +FC0B > CA CC # compat +FC0C > CA CD # compat +FC0D > CA CE # compat +FC0E > CA E5 # compat +FC0F > CA E9 # compat +FC10 > CA EA # compat +FC11 > CB CC # compat +FC12 > CB E5 # compat +FC13 > CB E9 # compat +FC14 > CB EA # compat +FC15 > CC CD # compat +FC16 > CC E5 # compat +FC17 > CD CC # compat +FC18 > CD E5 # compat +FC19 > CE CC # compat +FC1A > CE CD # compat +FC1B > CE E5 # compat +FC1C > D3 CC # compat +FC1D > D3 CD # compat +FC1E > D3 CE # compat +FC1F > D3 E5 # compat +FC20 > D5 CD # compat +FC21 > D5 E5 # compat +FC22 > D6 CC # compat +FC23 > D6 CD # compat +FC24 > D6 CE # compat +FC25 > D6 E5 # compat +FC26 > D7 CD # compat +FC27 > D7 E5 # compat +FC28 > D8 E5 # compat +FC29 > D9 CC # compat +FC2A > D9 E5 # compat +FC2B > DA CC # compat +FC2C > DA E5 # compat +FC2D > E1 CC # compat +FC2E > E1 CD # compat +FC2F > E1 CE # compat +FC30 > E1 E5 # compat +FC31 > E1 E9 # compat +FC32 > E1 EA # compat +FC33 > E2 CD # compat +FC34 > E2 E5 # compat +FC35 > E2 E9 # compat +FC36 > E2 EA # compat +FC37 > E3 C7 # compat +FC38 > E3 CC # compat +FC39 > E3 CD # compat +FC3A > E3 CE # compat +FC3B > E3 E4 # compat +FC3C > E3 E5 # compat +FC3D > E3 E9 # compat +FC3E > E3 EA # compat +FC3F > E4 CC # compat +FC40 > E4 CD # compat +FC41 > E4 CE # compat +FC42 > E4 E5 # compat +FC43 > E4 E9 # compat +FC44 > E4 EA # compat +FC45 > E5 CC # compat +FC46 > E5 CD # compat +FC47 > E5 CE # compat +FC48 > E5 E5 # compat +FC49 > E5 E9 # compat +FC4A > E5 EA # compat +FC4B > E6 CC # compat +FC4C > E6 CD # compat +FC4D > E6 CE # compat +FC4E > E6 E5 # compat +FC4F > E6 E9 # compat +FC50 > E6 EA # compat +FC51 > E7 CC # compat +FC52 > E7 E5 # compat +FC53 > E7 E9 # compat +FC54 > E7 EA # compat +FC55 > EA CC # compat +FC56 > EA CD # compat +FC57 > EA CE # compat +FC58 > EA E5 # compat +FC59 > EA E9 # compat +FC5A > EA EA # compat +FC5B > D0 # unsup: 0630 0670 +FC5C > D1 # unsup: 0631 0670 +FC5D > E9 # unsup: 0649 0670 +FC64 > C6 D1 # compat +FC65 > C6 D2 # compat +FC66 > C6 E5 # compat +FC67 > C6 E6 # compat +FC68 > C6 E9 # compat +FC69 > C6 EA # compat +FC6A > C8 D1 # compat +FC6B > C8 D2 # compat +FC6C > C8 E5 # compat +FC6D > C8 E6 # compat +FC6E > C8 E9 # compat +FC6F > C8 EA # compat +FC70 > CA D1 # compat +FC71 > CA D2 # compat +FC72 > CA E5 # compat +FC73 > CA E6 # compat +FC74 > CA E9 # compat +FC75 > CA EA # compat +FC76 > CB D1 # compat +FC77 > CB D2 # compat +FC78 > CB E5 # compat +FC79 > CB E6 # compat +FC7A > CB E9 # compat +FC7B > CB EA # compat +FC7C > E1 E9 # compat +FC7D > E1 EA # compat +FC7E > E2 E9 # compat +FC7F > E2 EA # compat +FC80 > E3 C7 # compat +FC81 > E3 E4 # compat +FC82 > E3 E5 # compat +FC83 > E3 E9 # compat +FC84 > E3 EA # compat +FC85 > E4 E5 # compat +FC86 > E4 E9 # compat +FC87 > E4 EA # compat +FC88 > E5 C7 # compat +FC89 > E5 E5 # compat +FC8A > E6 D1 # compat +FC8B > E6 D2 # compat +FC8C > E6 E5 # compat +FC8D > E6 E6 # compat +FC8E > E6 E9 # compat +FC8F > E6 EA # compat +FC90 > E9 # unsup: 0649 0670 +FC91 > EA D1 # compat +FC92 > EA D2 # compat +FC93 > EA E5 # compat +FC94 > EA E6 # compat +FC95 > EA E9 # compat +FC96 > EA EA # compat +FC97 > C6 CC # compat +FC98 > C6 CD # compat +FC99 > C6 CE # compat +FC9A > C6 E5 # compat +FC9B > C6 E7 # compat +FC9C > C8 CC # compat +FC9D > C8 CD # compat +FC9E > C8 CE # compat +FC9F > C8 E5 # compat +FCA0 > C8 E7 # compat +FCA1 > CA CC # compat +FCA2 > CA CD # compat +FCA3 > CA CE # compat +FCA4 > CA E5 # compat +FCA5 > CA E7 # compat +FCA6 > CB E5 # compat +FCA7 > CC CD # compat +FCA8 > CC E5 # compat +FCA9 > CD CC # compat +FCAA > CD E5 # compat +FCAB > CE CC # compat +FCAC > CE E5 # compat +FCAD > D3 CC # compat +FCAE > D3 CD # compat +FCAF > D3 CE # compat +FCB0 > D3 E5 # compat +FCB1 > D5 CD # compat +FCB2 > D5 CE # compat +FCB3 > D5 E5 # compat +FCB4 > D6 CC # compat +FCB5 > D6 CD # compat +FCB6 > D6 CE # compat +FCB7 > D6 E5 # compat +FCB8 > D7 CD # compat +FCB9 > D8 E5 # compat +FCBA > D9 CC # compat +FCBB > D9 E5 # compat +FCBC > DA CC # compat +FCBD > DA E5 # compat +FCBE > E1 CC # compat +FCBF > E1 CD # compat +FCC0 > E1 CE # compat +FCC1 > E1 E5 # compat +FCC2 > E2 CD # compat +FCC3 > E2 E5 # compat +FCC4 > E3 CC # compat +FCC5 > E3 CD # compat +FCC6 > E3 CE # compat +FCC7 > E3 E4 # compat +FCC8 > E3 E5 # compat +FCC9 > E4 CC # compat +FCCA > E4 CD # compat +FCCB > E4 CE # compat +FCCC > E4 E5 # compat +FCCD > E4 E7 # compat +FCCE > E5 CC # compat +FCCF > E5 CD # compat +FCD0 > E5 CE # compat +FCD1 > E5 E5 # compat +FCD2 > E6 CC # compat +FCD3 > E6 CD # compat +FCD4 > E6 CE # compat +FCD5 > E6 E5 # compat +FCD6 > E6 E7 # compat +FCD7 > E7 CC # compat +FCD8 > E7 E5 # compat +FCD9 > E7 # unsup: 0647 0670 +FCDA > EA CC # compat +FCDB > EA CD # compat +FCDC > EA CE # compat +FCDD > EA E5 # compat +FCDE > EA E7 # compat +FCDF > C6 E5 # compat +FCE0 > C6 E7 # compat +FCE1 > C8 E5 # compat +FCE2 > C8 E7 # compat +FCE3 > CA E5 # compat +FCE4 > CA E7 # compat +FCE5 > CB E5 # compat +FCE6 > CB E7 # compat +FCE7 > D3 E5 # compat +FCE8 > D3 E7 # compat +FCE9 > D4 E5 # compat +FCEA > D4 E7 # compat +FCEB > E3 E4 # compat +FCEC > E3 E5 # compat +FCED > E4 E5 # compat +FCEE > E6 E5 # compat +FCEF > E6 E7 # compat +FCF0 > EA E5 # compat +FCF1 > EA E7 # compat +FCF2 > E0 EE F1 # compat +FCF3 > E0 EF F1 # compat +FCF4 > E0 F0 F1 # compat +FCF5 > D7 E9 # compat +FCF6 > D7 EA # compat +FCF7 > D9 E9 # compat +FCF8 > D9 EA # compat +FCF9 > DA E9 # compat +FCFA > DA EA # compat +FCFB > D3 E9 # compat +FCFC > D3 EA # compat +FCFD > D4 E9 # compat +FCFE > D4 EA # compat +FCFF > CD E9 # compat +FD00 > CD EA # compat +FD01 > CC E9 # compat +FD02 > CC EA # compat +FD03 > CE E9 # compat +FD04 > CE EA # compat +FD05 > D5 E9 # compat +FD06 > D5 EA # compat +FD07 > D6 E9 # compat +FD08 > D6 EA # compat +FD09 > D4 CC # compat +FD0A > D4 CD # compat +FD0B > D4 CE # compat +FD0C > D4 E5 # compat +FD0D > D4 D1 # compat +FD0E > D3 D1 # compat +FD0F > D5 D1 # compat +FD10 > D6 D1 # compat +FD11 > D7 E9 # compat +FD12 > D7 EA # compat +FD13 > D9 E9 # compat +FD14 > D9 EA # compat +FD15 > DA E9 # compat +FD16 > DA EA # compat +FD17 > D3 E9 # compat +FD18 > D3 EA # compat +FD19 > D4 E9 # compat +FD1A > D4 EA # compat +FD1B > CD E9 # compat +FD1C > CD EA # compat +FD1D > CC E9 # compat +FD1E > CC EA # compat +FD1F > CE E9 # compat +FD20 > CE EA # compat +FD21 > D5 E9 # compat +FD22 > D5 EA # compat +FD23 > D6 E9 # compat +FD24 > D6 EA # compat +FD25 > D4 CC # compat +FD26 > D4 CD # compat +FD27 > D4 CE # compat +FD28 > D4 E5 # compat +FD29 > D4 D1 # compat +FD2A > D3 D1 # compat +FD2B > D5 D1 # compat +FD2C > D6 D1 # compat +FD2D > D4 CC # compat +FD2E > D4 CD # compat +FD2F > D4 CE # compat +FD30 > D4 E5 # compat +FD31 > D3 E7 # compat +FD32 > D4 E7 # compat +FD33 > D7 E5 # compat +FD34 > D3 CC # compat +FD35 > D3 CD # compat +FD36 > D3 CE # compat +FD37 > D4 CC # compat +FD38 > D4 CD # compat +FD39 > D4 CE # compat +FD3A > D7 E5 # compat +FD3B > D8 E5 # compat +FD3C > C7 EB # compat +FD3D > C7 EB # compat +FD50 > CA CC E5 # compat +FD51 > CA CD CC # compat +FD52 > CA CD CC # compat +FD53 > CA CD E5 # compat +FD54 > CA CE E5 # compat +FD55 > CA E5 CC # compat +FD56 > CA E5 CD # compat +FD57 > CA E5 CE # compat +FD58 > CC E5 CD # compat +FD59 > CC E5 CD # compat +FD5A > CD E5 EA # compat +FD5B > CD E5 E9 # compat +FD5C > D3 CD CC # compat +FD5D > D3 CC CD # compat +FD5E > D3 CC E9 # compat +FD5F > D3 E5 CD # compat +FD60 > D3 E5 CD # compat +FD61 > D3 E5 CC # compat +FD62 > D3 E5 E5 # compat +FD63 > D3 E5 E5 # compat +FD64 > D5 CD CD # compat +FD65 > D5 CD CD # compat +FD66 > D5 E5 E5 # compat +FD67 > D4 CD E5 # compat +FD68 > D4 CD E5 # compat +FD69 > D4 CC EA # compat +FD6A > D4 E5 CE # compat +FD6B > D4 E5 CE # compat +FD6C > D4 E5 E5 # compat +FD6D > D4 E5 E5 # compat +FD6E > D6 CD E9 # compat +FD6F > D6 CE E5 # compat +FD70 > D6 CE E5 # compat +FD71 > D7 E5 CD # compat +FD72 > D7 E5 CD # compat +FD73 > D7 E5 E5 # compat +FD74 > D7 E5 EA # compat +FD75 > D9 CC E5 # compat +FD76 > D9 E5 E5 # compat +FD77 > D9 E5 E5 # compat +FD78 > D9 E5 E9 # compat +FD79 > DA E5 E5 # compat +FD7A > DA E5 EA # compat +FD7B > DA E5 E9 # compat +FD7C > E1 CE E5 # compat +FD7D > E1 CE E5 # compat +FD7E > E2 E5 CD # compat +FD7F > E2 E5 E5 # compat +FD80 > E4 CD E5 # compat +FD81 > E4 CD EA # compat +FD82 > E4 CD E9 # compat +FD83 > E4 CC CC # compat +FD84 > E4 CC CC # compat +FD85 > E4 CE E5 # compat +FD86 > E4 CE E5 # compat +FD87 > E4 E5 CD # compat +FD88 > E4 E5 CD # compat +FD89 > E5 CD CC # compat +FD8A > E5 CD E5 # compat +FD8B > E5 CD EA # compat +FD8C > E5 CC CD # compat +FD8D > E5 CC E5 # compat +FD8E > E5 CE CC # compat +FD8F > E5 CE E5 # compat +FD92 > E5 CC CE # compat +FD93 > E7 E5 CC # compat +FD94 > E7 E5 E5 # compat +FD95 > E6 CD E5 # compat +FD96 > E6 CD E9 # compat +FD97 > E6 CC E5 # compat +FD98 > E6 CC E5 # compat +FD99 > E6 CC E9 # compat +FD9A > E6 E5 EA # compat +FD9B > E6 E5 E9 # compat +FD9C > EA E5 E5 # compat +FD9D > EA E5 E5 # compat +FD9E > C8 CE EA # compat +FD9F > CA CC EA # compat +FDA0 > CA CC E9 # compat +FDA1 > CA CE EA # compat +FDA2 > CA CE E9 # compat +FDA3 > CA E5 EA # compat +FDA4 > CA E5 E9 # compat +FDA5 > CC E5 EA # compat +FDA6 > CC CD E9 # compat +FDA7 > CC E5 E9 # compat +FDA8 > D3 CE E9 # compat +FDA9 > D5 CD EA # compat +FDAA > D4 CD EA # compat +FDAB > D6 CD EA # compat +FDAC > E4 CC EA # compat +FDAD > E4 E5 EA # compat +FDAE > EA CD EA # compat +FDAF > EA CC EA # compat +FDB0 > EA E5 EA # compat +FDB1 > E5 E5 EA # compat +FDB2 > E2 E5 EA # compat +FDB3 > E6 CD EA # compat +FDB4 > E2 E5 CD # compat +FDB5 > E4 CD E5 # compat +FDB6 > D9 E5 EA # compat +FDB7 > E3 E5 EA # compat +FDB8 > E6 CC CD # compat +FDB9 > E5 CE EA # compat +FDBA > E4 CC E5 # compat +FDBB > E3 E5 E5 # compat +FDBC > E4 CC E5 # compat +FDBD > E6 CC CD # compat +FDBE > CC CD EA # compat +FDBF > CD CC EA # compat +FDC0 > E5 CC EA # compat +FDC1 > E1 E5 EA # compat +FDC2 > C8 CD EA # compat +FDC3 > E3 E5 E5 # compat +FDC4 > D9 CC E5 # compat +FDC5 > D5 E5 E5 # compat +FDC6 > D3 CE EA # compat +FDC7 > E6 CC EA # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FE71 > E0 EB # compat +FE77 > E0 EE # compat +FE79 > E0 EF # compat +FE7B > E0 F0 # compat +FE7D > E0 F1 # compat +FE7F > E0 F2 # compat +FE80 > C1 # compat +FE81 > C2 # compat +FE82 > C2 # compat +FE83 > C3 # compat +FE84 > C3 # compat +FE85 > C4 # compat +FE86 > C4 # compat +FE87 > C5 # compat +FE88 > C5 # compat +FE89 > C6 # compat +FE8A > C6 # compat +FE8B > C6 # compat +FE8C > C6 # compat +FE8D > C7 # compat +FE8E > C7 # compat +FE8F > C8 # compat +FE90 > C8 # compat +FE91 > C8 # compat +FE92 > C8 # compat +FE93 > C9 # compat +FE94 > C9 # compat +FE95 > CA # compat +FE96 > CA # compat +FE97 > CA # compat +FE98 > CA # compat +FE99 > CB # compat +FE9A > CB # compat +FE9B > CB # compat +FE9C > CB # compat +FE9D > CC # compat +FE9E > CC # compat +FE9F > CC # compat +FEA0 > CC # compat +FEA1 > CD # compat +FEA2 > CD # compat +FEA3 > CD # compat +FEA4 > CD # compat +FEA5 > CE # compat +FEA6 > CE # compat +FEA7 > CE # compat +FEA8 > CE # compat +FEA9 > CF # compat +FEAA > CF # compat +FEAB > D0 # compat +FEAC > D0 # compat +FEAD > D1 # compat +FEAE > D1 # compat +FEAF > D2 # compat +FEB0 > D2 # compat +FEB1 > D3 # compat +FEB2 > D3 # compat +FEB3 > D3 # compat +FEB4 > D3 # compat +FEB5 > D4 # compat +FEB6 > D4 # compat +FEB7 > D4 # compat +FEB8 > D4 # compat +FEB9 > D5 # compat +FEBA > D5 # compat +FEBB > D5 # compat +FEBC > D5 # compat +FEBD > D6 # compat +FEBE > D6 # compat +FEBF > D6 # compat +FEC0 > D6 # compat +FEC1 > D7 # compat +FEC2 > D7 # compat +FEC3 > D7 # compat +FEC4 > D7 # compat +FEC5 > D8 # compat +FEC6 > D8 # compat +FEC7 > D8 # compat +FEC8 > D8 # compat +FEC9 > D9 # compat +FECA > D9 # compat +FECB > D9 # compat +FECC > D9 # compat +FECD > DA # compat +FECE > DA # compat +FECF > DA # compat +FED0 > DA # compat +FED1 > E1 # compat +FED2 > E1 # compat +FED3 > E1 # compat +FED4 > E1 # compat +FED5 > E2 # compat +FED6 > E2 # compat +FED7 > E2 # compat +FED8 > E2 # compat +FED9 > E3 # compat +FEDA > E3 # compat +FEDB > E3 # compat +FEDC > E3 # compat +FEDD > E4 # compat +FEDE > E4 # compat +FEDF > E4 # compat +FEE0 > E4 # compat +FEE1 > E5 # compat +FEE2 > E5 # compat +FEE3 > E5 # compat +FEE4 > E5 # compat +FEE5 > E6 # compat +FEE6 > E6 # compat +FEE7 > E6 # compat +FEE8 > E6 # compat +FEE9 > E7 # compat +FEEA > E7 # compat +FEEB > E7 # compat +FEEC > E7 # compat +FEED > E8 # compat +FEEE > E8 # compat +FEEF > E9 # compat +FEF0 > E9 # compat +FEF1 > EA # compat +FEF2 > EA # compat +FEF3 > EA # compat +FEF4 > EA # compat +FEF5 > E4 C2 # compat +FEF6 > E4 C2 # compat +FEF7 > E4 C3 # compat +FEF8 > E4 C3 # compat +FEF9 > E4 C5 # compat +FEFA > E4 C5 # compat +FEFB > E4 C7 # compat +FEFC > E4 C7 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +. + +STRICT +/ +N 213 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A4 > A4 +00AD > AD +037E > 3B +060C > AC +061B > BB +061F > BF +0621 > C1 +0622 > C2 +0623 > C3 +0624 > C4 +0625 > C5 +0626 > C6 +0627 > C7 / + N 3 + 0653 > C2 + 0654 > C3 + 0655 > C5 + . +0628 > C8 +0629 > C9 +062A > CA +062B > CB +062C > CC +062D > CD +062E > CE +062F > CF +0630 > D0 +0631 > D1 +0632 > D2 +0633 > D3 +0634 > D4 +0635 > D5 +0636 > D6 +0637 > D7 +0638 > D8 +0639 > D9 +063A > DA +0640 > E0 +0641 > E1 +0642 > E2 +0643 > E3 +0644 > E4 +0645 > E5 +0646 > E6 +0647 > E7 +0648 > E8 / + N 1 + 0654 > C4 + . +0649 > E9 +064A > EA / + N 1 + 0654 > C6 + . +064B > EB +064C > EC +064D > ED +064E > EE +064F > EF +0650 > F0 +0651 > F1 +0652 > F2 +1FEF > 60 +. + +NFD +/ +N 211 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A4 > 00A4 +AC > 060C +AD > 00AD +BB > 061B +BF > 061F +C1 > 0621 +C2 > 0627 0653 +C3 > 0627 0654 +C4 > 0648 0654 +C5 > 0627 0655 +C6 > 064A 0654 +C7 > 0627 +C8 > 0628 +C9 > 0629 +CA > 062A +CB > 062B +CC > 062C +CD > 062D +CE > 062E +CF > 062F +D0 > 0630 +D1 > 0631 +D2 > 0632 +D3 > 0633 +D4 > 0634 +D5 > 0635 +D6 > 0636 +D7 > 0637 +D8 > 0638 +D9 > 0639 +DA > 063A +E0 > 0640 +E1 > 0641 +E2 > 0642 +E3 > 0643 +E4 > 0644 +E5 > 0645 +E6 > 0646 +E7 > 0647 +E8 > 0648 +E9 > 0649 +EA > 064A +EB > 064B +EC > 064C +ED > 064D +EE > 064E +EF > 064F +F0 > 0650 +F1 > 0651 +F2 > 0652 +. + +NFC +/ +N 211 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A4 > 00A4 +AC > 060C +AD > 00AD +BB > 061B +BF > 061F +C1 > 0621 +C2 > 0622 +C3 > 0623 +C4 > 0624 +C5 > 0625 +C6 > 0626 +C7 > 0627 +C8 > 0628 +C9 > 0629 +CA > 062A +CB > 062B +CC > 062C +CD > 062D +CE > 062E +CF > 062F +D0 > 0630 +D1 > 0631 +D2 > 0632 +D3 > 0633 +D4 > 0634 +D5 > 0635 +D6 > 0636 +D7 > 0637 +D8 > 0638 +D9 > 0639 +DA > 063A +E0 > 0640 +E1 > 0641 +E2 > 0642 +E3 > 0643 +E4 > 0644 +E5 > 0645 +E6 > 0646 +E7 > 0647 +E8 > 0648 +E9 > 0649 +EA > 064A +EB > 064B +EC > 064C +ED > 064D +EE > 064E +EF > 064F +F0 > 0650 +F1 > 0651 +F2 > 0652 +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-6.cset b/assets/data/iso-8859-6.cset new file mode 100644 index 0000000..702df8d --- /dev/null +++ b/assets/data/iso-8859-6.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-6 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 E0A1 . N A1 A1 A1 00 00 00 # <unused> +A2 E0A2 . N A2 A2 A2 00 00 00 # <unused> +A3 E0A3 . N A3 A3 A3 00 00 00 # <unused> +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 E0A5 . N A5 A5 A5 00 00 00 # <unused> +A6 E0A6 . N A6 A6 A6 00 00 00 # <unused> +A7 E0A7 . N A7 A7 A7 00 00 00 # <unused> +A8 E0A8 . N A8 A8 A8 00 00 00 # <unused> +A9 E0A9 . N A9 A9 A9 00 00 00 # <unused> +AA E0AA . N AA AA AA 00 00 00 # <unused> +AB E0AB . N AB AB AB 00 00 00 # <unused> +AC 060C - Y AC AC AC 00 00 00 # ARABIC COMMA +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE E0AE . N AE AE AE 00 00 00 # <unused> +AF E0AF . N AF AF AF 00 00 00 # <unused> +B0 E0B0 . N B0 B0 B0 00 00 00 # <unused> +B1 E0B1 . N B1 B1 B1 00 00 00 # <unused> +B2 E0B2 . N B2 B2 B2 00 00 00 # <unused> +B3 E0B3 . N B3 B3 B3 00 00 00 # <unused> +B4 E0B4 . N B4 B4 B4 00 00 00 # <unused> +B5 E0B5 . N B5 B5 B5 00 00 00 # <unused> +B6 E0B6 . N B6 B6 B6 00 00 00 # <unused> +B7 E0B7 . N B7 B7 B7 00 00 00 # <unused> +B8 E0B8 . N B8 B8 B8 00 00 00 # <unused> +B9 E0B9 . N B9 B9 B9 00 00 00 # <unused> +BA E0BA . N BA BA BA 00 00 00 # <unused> +BB 061B - Y BB BB BB 00 00 00 # ARABIC SEMICOLON +BC E0BC . N BC BC BC 00 00 00 # <unused> +BD E0BD . N BD BD BD 00 00 00 # <unused> +BE E0BE . N BE BE BE 00 00 00 # <unused> +BF 061F - Y BF BF BF 00 00 00 # ARABIC QUESTION MARK +C0 E0C0 . N C0 C0 C0 00 00 00 # <unused> +C1 0621 L Y C1 C1 C1 C1 C1 C1 # ARABIC LETTER HAMZA +C2 0622 L Y C2 C2 C2 C7 C7 C7 # ARABIC LETTER ALEF WITH MADDA ABOVE +C3 0623 L Y C3 C3 C3 C7 C7 C7 # ARABIC LETTER ALEF WITH HAMZA ABOVE +C4 0624 L Y C4 C4 C4 E8 E8 E8 # ARABIC LETTER WAW WITH HAMZA ABOVE +C5 0625 L Y C5 C5 C5 C7 C7 C7 # ARABIC LETTER ALEF WITH HAMZA BELOW +C6 0626 L Y C6 C6 C6 EA EA EA # ARABIC LETTER YEH WITH HAMZA ABOVE +C7 0627 L Y C7 C7 C7 C7 C7 C7 # ARABIC LETTER ALEF +C8 0628 L Y C8 C8 C8 C8 C8 C8 # ARABIC LETTER BEH +C9 0629 L Y C9 C9 C9 C9 C9 C9 # ARABIC LETTER TEH MARBUTA +CA 062A L Y CA CA CA CA CA CA # ARABIC LETTER TEH +CB 062B L Y CB CB CB CB CB CB # ARABIC LETTER THEH +CC 062C L Y CC CC CC CC CC CC # ARABIC LETTER JEEM +CD 062D L Y CD CD CD CD CD CD # ARABIC LETTER HAH +CE 062E L Y CE CE CE CE CE CE # ARABIC LETTER KHAH +CF 062F L Y CF CF CF CF CF CF # ARABIC LETTER DAL +D0 0630 L Y D0 D0 D0 D0 D0 D0 # ARABIC LETTER THAL +D1 0631 L Y D1 D1 D1 D1 D1 D1 # ARABIC LETTER REH +D2 0632 L Y D2 D2 D2 D2 D2 D2 # ARABIC LETTER ZAIN +D3 0633 L Y D3 D3 D3 D3 D3 D3 # ARABIC LETTER SEEN +D4 0634 L Y D4 D4 D4 D4 D4 D4 # ARABIC LETTER SHEEN +D5 0635 L Y D5 D5 D5 D5 D5 D5 # ARABIC LETTER SAD +D6 0636 L Y D6 D6 D6 D6 D6 D6 # ARABIC LETTER DAD +D7 0637 L Y D7 D7 D7 D7 D7 D7 # ARABIC LETTER TAH +D8 0638 L Y D8 D8 D8 D8 D8 D8 # ARABIC LETTER ZAH +D9 0639 L Y D9 D9 D9 D9 D9 D9 # ARABIC LETTER AIN +DA 063A L Y DA DA DA DA DA DA # ARABIC LETTER GHAIN +DB E0DB . N DB DB DB 00 00 00 # <unused> +DC E0DC . N DC DC DC 00 00 00 # <unused> +DD E0DD . N DD DD DD 00 00 00 # <unused> +DE E0DE . N DE DE DE 00 00 00 # <unused> +DF E0DF . N DF DF DF 00 00 00 # <unused> +E0 0640 l Y E0 E0 E0 E0 E0 E0 # ARABIC TATWEEL +E1 0641 L Y E1 E1 E1 E1 E1 E1 # ARABIC LETTER FEH +E2 0642 L Y E2 E2 E2 E2 E2 E2 # ARABIC LETTER QAF +E3 0643 L Y E3 E3 E3 E3 E3 E3 # ARABIC LETTER KAF +E4 0644 L Y E4 E4 E4 E4 E4 E4 # ARABIC LETTER LAM +E5 0645 L Y E5 E5 E5 E5 E5 E5 # ARABIC LETTER MEEM +E6 0646 L Y E6 E6 E6 E6 E6 E6 # ARABIC LETTER NOON +E7 0647 L Y E7 E7 E7 E7 E7 E7 # ARABIC LETTER HEH +E8 0648 L Y E8 E8 E8 E8 E8 E8 # ARABIC LETTER WAW +E9 0649 L Y E9 E9 E9 E9 E9 E9 # ARABIC LETTER ALEF MAKSURA +EA 064A L Y EA EA EA EA EA EA # ARABIC LETTER YEH +EB 064B M M EB EB EB 00 00 00 # ARABIC FATHATAN +EC 064C M M EC EC EC 00 00 00 # ARABIC DAMMATAN +ED 064D M M ED ED ED 00 00 00 # ARABIC KASRATAN +EE 064E M M EE EE EE 00 00 00 # ARABIC FATHA +EF 064F M M EF EF EF 00 00 00 # ARABIC DAMMA +F0 0650 M M F0 F0 F0 00 00 00 # ARABIC KASRA +F1 0651 M M F1 F1 F1 00 00 00 # ARABIC SHADDA +F2 0652 M M F2 F2 F2 00 00 00 # ARABIC SUKUN +F3 E0F3 . N F3 F3 F3 00 00 00 # <unused> +F4 E0F4 . N F4 F4 F4 00 00 00 # <unused> +F5 E0F5 . N F5 F5 F5 00 00 00 # <unused> +F6 E0F6 . N F6 F6 F6 00 00 00 # <unused> +F7 E0F7 . N F7 F7 F7 00 00 00 # <unused> +F8 E0F8 . N F8 F8 F8 00 00 00 # <unused> +F9 E0F9 . N F9 F9 F9 00 00 00 # <unused> +FA E0FA . N FA FA FA 00 00 00 # <unused> +FB E0FB . N FB FB FB 00 00 00 # <unused> +FC E0FC . N FC FC FC 00 00 00 # <unused> +FD E0FD . N FD FD FD 00 00 00 # <unused> +FE E0FE . N FE FE FE 00 00 00 # <unused> +FF E0FF . N FF FF FF 00 00 00 # <unused> diff --git a/assets/data/iso-8859-7.cmap b/assets/data/iso-8859-7.cmap new file mode 100644 index 0000000..76407a3 --- /dev/null +++ b/assets/data/iso-8859-7.cmap @@ -0,0 +1,2145 @@ +INTERNAL +/ +N 1220 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A3 > A3 +00A6 > A6 +00A7 > A7 +00A8 > A8 / + N 1 + 0301 > B5 + . +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B7 > B7 +00BB > BB +00BD > BD +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037A > AA +037E > 3B +0384 > B4 +0385 > B5 +0386 > B6 +0387 > B7 +0388 > B8 +0389 > B9 +038A > BA +038C > BC +038E > BE +038F > BF +0390 > C0 +0391 > C1 / + N 1 + 0301 > B6 + . +0392 > C2 +0393 > C3 +0394 > C4 +0395 > C5 / + N 1 + 0301 > B8 + . +0396 > C6 +0397 > C7 / + N 1 + 0301 > B9 + . +0398 > C8 +0399 > C9 / + N 2 + 0301 > BA + 0308 > DA + . +039A > CA +039B > CB +039C > CC +039D > CD +039E > CE +039F > CF / + N 1 + 0301 > BC + . +03A0 > D0 +03A1 > D1 +03A3 > D3 +03A4 > D4 +03A5 > D5 / + N 2 + 0301 > BE + 0308 > DB + . +03A6 > D6 +03A7 > D7 +03A8 > D8 +03A9 > D9 / + N 1 + 0301 > BF + . +03AA > DA +03AB > DB +03AC > DC +03AD > DD +03AE > DE +03AF > DF +03B0 > E0 +03B1 > E1 / + N 1 + 0301 > DC + . +03B2 > E2 +03B3 > E3 +03B4 > E4 +03B5 > E5 / + N 1 + 0301 > DD + . +03B6 > E6 +03B7 > E7 / + N 1 + 0301 > DE + . +03B8 > E8 +03B9 > E9 / + N 2 + 0301 > DF + 0308 > FA / + N 1 + 0301 > C0 + . + . +03BA > EA +03BB > EB +03BC > EC +03BD > ED +03BE > EE +03BF > EF / + N 1 + 0301 > FC + . +03C0 > F0 +03C1 > F1 +03C2 > F2 +03C3 > F3 +03C4 > F4 +03C5 > F5 / + N 2 + 0301 > FD + 0308 > FB / + N 1 + 0301 > E0 + . + . +03C6 > F6 +03C7 > F7 +03C8 > F8 +03C9 > F9 / + N 1 + 0301 > FE + . +03CA > FA / + N 1 + 0301 > C0 + . +03CB > FB / + N 1 + 0301 > E0 + . +03CC > FC +03CD > FD +03CE > FE +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1F00 > E1 # unsup: 03B1 0313 +1F01 > E1 # unsup: 03B1 0314 +1F02 > E1 # unsup: 03B1 0313 0300 +1F03 > E1 # unsup: 03B1 0314 0300 +1F04 > E1 # unsup: 03B1 0313 0301 +1F05 > E1 # unsup: 03B1 0314 0301 +1F06 > E1 # unsup: 03B1 0313 0342 +1F07 > E1 # unsup: 03B1 0314 0342 +1F08 > C1 # unsup: 0391 0313 +1F09 > C1 # unsup: 0391 0314 +1F0A > C1 # unsup: 0391 0313 0300 +1F0B > C1 # unsup: 0391 0314 0300 +1F0C > C1 # unsup: 0391 0313 0301 +1F0D > C1 # unsup: 0391 0314 0301 +1F0E > C1 # unsup: 0391 0313 0342 +1F0F > C1 # unsup: 0391 0314 0342 +1F10 > E5 # unsup: 03B5 0313 +1F11 > E5 # unsup: 03B5 0314 +1F12 > E5 # unsup: 03B5 0313 0300 +1F13 > E5 # unsup: 03B5 0314 0300 +1F14 > E5 # unsup: 03B5 0313 0301 +1F15 > E5 # unsup: 03B5 0314 0301 +1F18 > C5 # unsup: 0395 0313 +1F19 > C5 # unsup: 0395 0314 +1F1A > C5 # unsup: 0395 0313 0300 +1F1B > C5 # unsup: 0395 0314 0300 +1F1C > C5 # unsup: 0395 0313 0301 +1F1D > C5 # unsup: 0395 0314 0301 +1F20 > E7 # unsup: 03B7 0313 +1F21 > E7 # unsup: 03B7 0314 +1F22 > E7 # unsup: 03B7 0313 0300 +1F23 > E7 # unsup: 03B7 0314 0300 +1F24 > E7 # unsup: 03B7 0313 0301 +1F25 > E7 # unsup: 03B7 0314 0301 +1F26 > E7 # unsup: 03B7 0313 0342 +1F27 > E7 # unsup: 03B7 0314 0342 +1F28 > C7 # unsup: 0397 0313 +1F29 > C7 # unsup: 0397 0314 +1F2A > C7 # unsup: 0397 0313 0300 +1F2B > C7 # unsup: 0397 0314 0300 +1F2C > C7 # unsup: 0397 0313 0301 +1F2D > C7 # unsup: 0397 0314 0301 +1F2E > C7 # unsup: 0397 0313 0342 +1F2F > C7 # unsup: 0397 0314 0342 +1F30 > E9 # unsup: 03B9 0313 +1F31 > E9 # unsup: 03B9 0314 +1F32 > E9 # unsup: 03B9 0313 0300 +1F33 > E9 # unsup: 03B9 0314 0300 +1F34 > E9 # unsup: 03B9 0313 0301 +1F35 > E9 # unsup: 03B9 0314 0301 +1F36 > E9 # unsup: 03B9 0313 0342 +1F37 > E9 # unsup: 03B9 0314 0342 +1F38 > C9 # unsup: 0399 0313 +1F39 > C9 # unsup: 0399 0314 +1F3A > C9 # unsup: 0399 0313 0300 +1F3B > C9 # unsup: 0399 0314 0300 +1F3C > C9 # unsup: 0399 0313 0301 +1F3D > C9 # unsup: 0399 0314 0301 +1F3E > C9 # unsup: 0399 0313 0342 +1F3F > C9 # unsup: 0399 0314 0342 +1F40 > EF # unsup: 03BF 0313 +1F41 > EF # unsup: 03BF 0314 +1F42 > EF # unsup: 03BF 0313 0300 +1F43 > EF # unsup: 03BF 0314 0300 +1F44 > EF # unsup: 03BF 0313 0301 +1F45 > EF # unsup: 03BF 0314 0301 +1F48 > CF # unsup: 039F 0313 +1F49 > CF # unsup: 039F 0314 +1F4A > CF # unsup: 039F 0313 0300 +1F4B > CF # unsup: 039F 0314 0300 +1F4C > CF # unsup: 039F 0313 0301 +1F4D > CF # unsup: 039F 0314 0301 +1F50 > F5 # unsup: 03C5 0313 +1F51 > F5 # unsup: 03C5 0314 +1F52 > F5 # unsup: 03C5 0313 0300 +1F53 > F5 # unsup: 03C5 0314 0300 +1F54 > F5 # unsup: 03C5 0313 0301 +1F55 > F5 # unsup: 03C5 0314 0301 +1F56 > F5 # unsup: 03C5 0313 0342 +1F57 > F5 # unsup: 03C5 0314 0342 +1F59 > D5 # unsup: 03A5 0314 +1F5B > D5 # unsup: 03A5 0314 0300 +1F5D > D5 # unsup: 03A5 0314 0301 +1F5F > D5 # unsup: 03A5 0314 0342 +1F60 > F9 # unsup: 03C9 0313 +1F61 > F9 # unsup: 03C9 0314 +1F62 > F9 # unsup: 03C9 0313 0300 +1F63 > F9 # unsup: 03C9 0314 0300 +1F64 > F9 # unsup: 03C9 0313 0301 +1F65 > F9 # unsup: 03C9 0314 0301 +1F66 > F9 # unsup: 03C9 0313 0342 +1F67 > F9 # unsup: 03C9 0314 0342 +1F68 > D9 # unsup: 03A9 0313 +1F69 > D9 # unsup: 03A9 0314 +1F6A > D9 # unsup: 03A9 0313 0300 +1F6B > D9 # unsup: 03A9 0314 0300 +1F6C > D9 # unsup: 03A9 0313 0301 +1F6D > D9 # unsup: 03A9 0314 0301 +1F6E > D9 # unsup: 03A9 0313 0342 +1F6F > D9 # unsup: 03A9 0314 0342 +1F70 > E1 # unsup: 03B1 0300 +1F71 > DC +1F72 > E5 # unsup: 03B5 0300 +1F73 > DD +1F74 > E7 # unsup: 03B7 0300 +1F75 > DE +1F76 > E9 # unsup: 03B9 0300 +1F77 > DF +1F78 > EF # unsup: 03BF 0300 +1F79 > FC +1F7A > F5 # unsup: 03C5 0300 +1F7B > FD +1F7C > F9 # unsup: 03C9 0300 +1F7D > FE +1F80 > E1 # unsup: 03B1 0313 0345 +1F81 > E1 # unsup: 03B1 0314 0345 +1F82 > E1 # unsup: 03B1 0313 0300 0345 +1F83 > E1 # unsup: 03B1 0314 0300 0345 +1F84 > E1 # unsup: 03B1 0313 0301 0345 +1F85 > E1 # unsup: 03B1 0314 0301 0345 +1F86 > E1 # unsup: 03B1 0313 0342 0345 +1F87 > E1 # unsup: 03B1 0314 0342 0345 +1F88 > C1 # unsup: 0391 0313 0345 +1F89 > C1 # unsup: 0391 0314 0345 +1F8A > C1 # unsup: 0391 0313 0300 0345 +1F8B > C1 # unsup: 0391 0314 0300 0345 +1F8C > C1 # unsup: 0391 0313 0301 0345 +1F8D > C1 # unsup: 0391 0314 0301 0345 +1F8E > C1 # unsup: 0391 0313 0342 0345 +1F8F > C1 # unsup: 0391 0314 0342 0345 +1F90 > E7 # unsup: 03B7 0313 0345 +1F91 > E7 # unsup: 03B7 0314 0345 +1F92 > E7 # unsup: 03B7 0313 0300 0345 +1F93 > E7 # unsup: 03B7 0314 0300 0345 +1F94 > E7 # unsup: 03B7 0313 0301 0345 +1F95 > E7 # unsup: 03B7 0314 0301 0345 +1F96 > E7 # unsup: 03B7 0313 0342 0345 +1F97 > E7 # unsup: 03B7 0314 0342 0345 +1F98 > C7 # unsup: 0397 0313 0345 +1F99 > C7 # unsup: 0397 0314 0345 +1F9A > C7 # unsup: 0397 0313 0300 0345 +1F9B > C7 # unsup: 0397 0314 0300 0345 +1F9C > C7 # unsup: 0397 0313 0301 0345 +1F9D > C7 # unsup: 0397 0314 0301 0345 +1F9E > C7 # unsup: 0397 0313 0342 0345 +1F9F > C7 # unsup: 0397 0314 0342 0345 +1FA0 > F9 # unsup: 03C9 0313 0345 +1FA1 > F9 # unsup: 03C9 0314 0345 +1FA2 > F9 # unsup: 03C9 0313 0300 0345 +1FA3 > F9 # unsup: 03C9 0314 0300 0345 +1FA4 > F9 # unsup: 03C9 0313 0301 0345 +1FA5 > F9 # unsup: 03C9 0314 0301 0345 +1FA6 > F9 # unsup: 03C9 0313 0342 0345 +1FA7 > F9 # unsup: 03C9 0314 0342 0345 +1FA8 > D9 # unsup: 03A9 0313 0345 +1FA9 > D9 # unsup: 03A9 0314 0345 +1FAA > D9 # unsup: 03A9 0313 0300 0345 +1FAB > D9 # unsup: 03A9 0314 0300 0345 +1FAC > D9 # unsup: 03A9 0313 0301 0345 +1FAD > D9 # unsup: 03A9 0314 0301 0345 +1FAE > D9 # unsup: 03A9 0313 0342 0345 +1FAF > D9 # unsup: 03A9 0314 0342 0345 +1FB0 > E1 # unsup: 03B1 0306 +1FB1 > E1 # unsup: 03B1 0304 +1FB2 > E1 # unsup: 03B1 0300 0345 +1FB3 > E1 # unsup: 03B1 0345 +1FB4 > DC # unsup: 03AC 0345 +1FB6 > E1 # unsup: 03B1 0342 +1FB7 > E1 # unsup: 03B1 0342 0345 +1FB8 > C1 # unsup: 0391 0306 +1FB9 > C1 # unsup: 0391 0304 +1FBA > C1 # unsup: 0391 0300 +1FBB > B6 +1FBC > C1 # unsup: 0391 0345 +1FBE > E9 +1FC1 > A8 # unsup: 00A8 0342 +1FC2 > E7 # unsup: 03B7 0300 0345 +1FC3 > E7 # unsup: 03B7 0345 +1FC4 > DE # unsup: 03AE 0345 +1FC6 > E7 # unsup: 03B7 0342 +1FC7 > E7 # unsup: 03B7 0342 0345 +1FC8 > C5 # unsup: 0395 0300 +1FC9 > B8 +1FCA > C7 # unsup: 0397 0300 +1FCB > B9 +1FCC > C7 # unsup: 0397 0345 +1FD0 > E9 # unsup: 03B9 0306 +1FD1 > E9 # unsup: 03B9 0304 +1FD2 > FA # unsup: 03CA 0300 +1FD3 > C0 +1FD6 > E9 # unsup: 03B9 0342 +1FD7 > FA # unsup: 03CA 0342 +1FD8 > C9 # unsup: 0399 0306 +1FD9 > C9 # unsup: 0399 0304 +1FDA > C9 # unsup: 0399 0300 +1FDB > BA +1FE0 > F5 # unsup: 03C5 0306 +1FE1 > F5 # unsup: 03C5 0304 +1FE2 > FB # unsup: 03CB 0300 +1FE3 > E0 +1FE4 > F1 # unsup: 03C1 0313 +1FE5 > F1 # unsup: 03C1 0314 +1FE6 > F5 # unsup: 03C5 0342 +1FE7 > FB # unsup: 03CB 0342 +1FE8 > D5 # unsup: 03A5 0306 +1FE9 > D5 # unsup: 03A5 0304 +1FEA > D5 # unsup: 03A5 0300 +1FEB > BE +1FEC > D1 # unsup: 03A1 0314 +1FED > A8 # unsup: 00A8 0300 +1FEE > B5 +1FEF > 60 +1FF2 > F9 # unsup: 03C9 0300 0345 +1FF3 > F9 # unsup: 03C9 0345 +1FF4 > FE # unsup: 03CE 0345 +1FF6 > F9 # unsup: 03C9 0342 +1FF7 > F9 # unsup: 03C9 0342 0345 +1FF8 > CF # unsup: 039F 0300 +1FF9 > BC +1FFA > D9 # unsup: 03A9 0300 +1FFB > BF +1FFC > D9 # unsup: 03A9 0345 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2015 > AF +2018 > A1 +2019 > A2 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +20AC > A4 +20AF > A5 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE4 > A6 # compat +. + +STRICT +/ +N 274 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A3 > A3 +00A6 > A6 +00A7 > A7 +00A8 > A8 / + N 1 + 0301 > B5 + . +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B7 > B7 +00BB > BB +00BD > BD +037A > AA +037E > 3B +0384 > B4 +0385 > B5 +0386 > B6 +0387 > B7 +0388 > B8 +0389 > B9 +038A > BA +038C > BC +038E > BE +038F > BF +0390 > C0 +0391 > C1 / + N 1 + 0301 > B6 + . +0392 > C2 +0393 > C3 +0394 > C4 +0395 > C5 / + N 1 + 0301 > B8 + . +0396 > C6 +0397 > C7 / + N 1 + 0301 > B9 + . +0398 > C8 +0399 > C9 / + N 2 + 0301 > BA + 0308 > DA + . +039A > CA +039B > CB +039C > CC +039D > CD +039E > CE +039F > CF / + N 1 + 0301 > BC + . +03A0 > D0 +03A1 > D1 +03A3 > D3 +03A4 > D4 +03A5 > D5 / + N 2 + 0301 > BE + 0308 > DB + . +03A6 > D6 +03A7 > D7 +03A8 > D8 +03A9 > D9 / + N 1 + 0301 > BF + . +03AA > DA +03AB > DB +03AC > DC +03AD > DD +03AE > DE +03AF > DF +03B0 > E0 +03B1 > E1 / + N 1 + 0301 > DC + . +03B2 > E2 +03B3 > E3 +03B4 > E4 +03B5 > E5 / + N 1 + 0301 > DD + . +03B6 > E6 +03B7 > E7 / + N 1 + 0301 > DE + . +03B8 > E8 +03B9 > E9 / + N 2 + 0301 > DF + 0308 > FA / + N 1 + 0301 > C0 + . + . +03BA > EA +03BB > EB +03BC > EC +03BD > ED +03BE > EE +03BF > EF / + N 1 + 0301 > FC + . +03C0 > F0 +03C1 > F1 +03C2 > F2 +03C3 > F3 +03C4 > F4 +03C5 > F5 / + N 2 + 0301 > FD + 0308 > FB / + N 1 + 0301 > E0 + . + . +03C6 > F6 +03C7 > F7 +03C8 > F8 +03C9 > F9 / + N 1 + 0301 > FE + . +03CA > FA / + N 1 + 0301 > C0 + . +03CB > FB / + N 1 + 0301 > E0 + . +03CC > FC +03CD > FD +03CE > FE +1F71 > DC +1F73 > DD +1F75 > DE +1F77 > DF +1F79 > FC +1F7B > FD +1F7D > FE +1FBB > B6 +1FBE > E9 +1FC9 > B8 +1FCB > B9 +1FD3 > C0 +1FDB > BA +1FE3 > E0 +1FEB > BE +1FEE > B5 +1FEF > 60 +1FF9 > BC +1FFB > BF +2015 > AF +2018 > A1 +2019 > A2 +20AC > A4 +20AF > A5 +. + +NFD +/ +N 253 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 2018 +A2 > 2019 +A3 > 00A3 +A4 > 20AC +A5 > 20AF +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 037A +AB > 00AB +AC > 00AC +AD > 00AD +AF > 2015 +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 0384 +B5 > 00A8 0301 +B6 > 0391 0301 +B7 > 00B7 +B8 > 0395 0301 +B9 > 0397 0301 +BA > 0399 0301 +BB > 00BB +BC > 039F 0301 +BD > 00BD +BE > 03A5 0301 +BF > 03A9 0301 +C0 > 03B9 0308 0301 +C1 > 0391 +C2 > 0392 +C3 > 0393 +C4 > 0394 +C5 > 0395 +C6 > 0396 +C7 > 0397 +C8 > 0398 +C9 > 0399 +CA > 039A +CB > 039B +CC > 039C +CD > 039D +CE > 039E +CF > 039F +D0 > 03A0 +D1 > 03A1 +D3 > 03A3 +D4 > 03A4 +D5 > 03A5 +D6 > 03A6 +D7 > 03A7 +D8 > 03A8 +D9 > 03A9 +DA > 0399 0308 +DB > 03A5 0308 +DC > 03B1 0301 +DD > 03B5 0301 +DE > 03B7 0301 +DF > 03B9 0301 +E0 > 03C5 0308 0301 +E1 > 03B1 +E2 > 03B2 +E3 > 03B3 +E4 > 03B4 +E5 > 03B5 +E6 > 03B6 +E7 > 03B7 +E8 > 03B8 +E9 > 03B9 +EA > 03BA +EB > 03BB +EC > 03BC +ED > 03BD +EE > 03BE +EF > 03BF +F0 > 03C0 +F1 > 03C1 +F2 > 03C2 +F3 > 03C3 +F4 > 03C4 +F5 > 03C5 +F6 > 03C6 +F7 > 03C7 +F8 > 03C8 +F9 > 03C9 +FA > 03B9 0308 +FB > 03C5 0308 +FC > 03BF 0301 +FD > 03C5 0301 +FE > 03C9 0301 +. + +NFC +/ +N 253 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 2018 +A2 > 2019 +A3 > 00A3 +A4 > 20AC +A5 > 20AF +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 037A +AB > 00AB +AC > 00AC +AD > 00AD +AF > 2015 +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 0384 +B5 > 0385 +B6 > 0386 +B7 > 00B7 +B8 > 0388 +B9 > 0389 +BA > 038A +BB > 00BB +BC > 038C +BD > 00BD +BE > 038E +BF > 038F +C0 > 0390 +C1 > 0391 +C2 > 0392 +C3 > 0393 +C4 > 0394 +C5 > 0395 +C6 > 0396 +C7 > 0397 +C8 > 0398 +C9 > 0399 +CA > 039A +CB > 039B +CC > 039C +CD > 039D +CE > 039E +CF > 039F +D0 > 03A0 +D1 > 03A1 +D3 > 03A3 +D4 > 03A4 +D5 > 03A5 +D6 > 03A6 +D7 > 03A7 +D8 > 03A8 +D9 > 03A9 +DA > 03AA +DB > 03AB +DC > 03AC +DD > 03AD +DE > 03AE +DF > 03AF +E0 > 03B0 +E1 > 03B1 +E2 > 03B2 +E3 > 03B3 +E4 > 03B4 +E5 > 03B5 +E6 > 03B6 +E7 > 03B7 +E8 > 03B8 +E9 > 03B9 +EA > 03BA +EB > 03BB +EC > 03BC +ED > 03BD +EE > 03BE +EF > 03BF +F0 > 03C0 +F1 > 03C1 +F2 > 03C2 +F3 > 03C3 +F4 > 03C4 +F5 > 03C5 +F6 > 03C6 +F7 > 03C7 +F8 > 03C8 +F9 > 03C9 +FA > 03CA +FB > 03CB +FC > 03CC +FD > 03CD +FE > 03CE +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-7.cset b/assets/data/iso-8859-7.cset new file mode 100644 index 0000000..99022e4 --- /dev/null +++ b/assets/data/iso-8859-7.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-7 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 2018 - Y A1 A1 A1 00 00 00 # LEFT SINGLE QUOTATION MARK +A2 2019 - Y A2 A2 A2 00 00 00 # RIGHT SINGLE QUOTATION MARK +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 20AC - Y A4 A4 A4 00 00 00 # EURO SIGN +A5 20AF - Y A5 A5 A5 00 00 00 # DRACHMA SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 037A M Y AA AA AA 00 00 00 # GREEK YPOGEGRAMMENI +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE E0AE . N AE AE AE 00 00 00 # <unused> +AF 2015 - Y AF AF AF 00 00 00 # HORIZONTAL BAR +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 0384 - Y B4 B4 B4 00 00 00 # GREEK TONOS +B5 0385 - Y B5 B5 B5 00 00 00 # GREEK DIALYTIKA TONOS +B6 0386 L Y B6 DC B6 C1 2A 00 # GREEK CAPITAL LETTER ALPHA WITH TONOS +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 0388 L Y B8 DD B8 C5 2A 00 # GREEK CAPITAL LETTER EPSILON WITH TONOS +B9 0389 L Y B9 DE B9 C7 2A 00 # GREEK CAPITAL LETTER ETA WITH TONOS +BA 038A L Y BA DF BA C9 2A 00 # GREEK CAPITAL LETTER IOTA WITH TONOS +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 038C L Y BC FC BC CF 2A 00 # GREEK CAPITAL LETTER OMICRON WITH TONOS +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 038E L Y BE FD BE D5 2A 00 # GREEK CAPITAL LETTER UPSILON WITH TONOS +BF 038F L Y BF FE BF D9 2A 00 # GREEK CAPITAL LETTER OMEGA WITH TONOS +C0 0390 L Y C0 C0 C0 E9 2A 00 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +C1 0391 L Y C1 E1 C1 C1 2A 00 # GREEK CAPITAL LETTER ALPHA +C2 0392 L Y C2 E2 C2 C2 E2 E2 # GREEK CAPITAL LETTER BETA +C3 0393 L Y C3 E3 C3 C3 E3 E3 # GREEK CAPITAL LETTER GAMMA +C4 0394 L Y C4 E4 C4 C4 E4 E4 # GREEK CAPITAL LETTER DELTA +C5 0395 L Y C5 E5 C5 C5 2A 00 # GREEK CAPITAL LETTER EPSILON +C6 0396 L Y C6 E6 C6 C6 E6 E6 # GREEK CAPITAL LETTER ZETA +C7 0397 L Y C7 E7 C7 C7 2A 00 # GREEK CAPITAL LETTER ETA +C8 0398 L Y C8 E8 C8 C8 E8 E8 # GREEK CAPITAL LETTER THETA +C9 0399 L Y C9 E9 C9 C9 2A 00 # GREEK CAPITAL LETTER IOTA +CA 039A L Y CA EA CA CA EA EA # GREEK CAPITAL LETTER KAPPA +CB 039B L Y CB EB CB CB EB EB # GREEK CAPITAL LETTER LAMDA +CC 039C L Y CC EC CC CC EC EC # GREEK CAPITAL LETTER MU +CD 039D L Y CD ED CD CD ED ED # GREEK CAPITAL LETTER NU +CE 039E L Y CE EE CE CE EE EE # GREEK CAPITAL LETTER XI +CF 039F L Y CF EF CF CF 2A 00 # GREEK CAPITAL LETTER OMICRON +D0 03A0 L Y D0 F0 D0 D0 F0 F0 # GREEK CAPITAL LETTER PI +D1 03A1 L Y D1 F1 D1 D1 F1 F1 # GREEK CAPITAL LETTER RHO +D2 E0D2 . N D2 D2 D2 00 00 00 # <unused> +D3 03A3 L Y D3 F3 D3 D3 F3 F3 # GREEK CAPITAL LETTER SIGMA +D4 03A4 L Y D4 F4 D4 D4 F4 F4 # GREEK CAPITAL LETTER TAU +D5 03A5 L Y D5 F5 D5 D5 2A 00 # GREEK CAPITAL LETTER UPSILON +D6 03A6 L Y D6 F6 D6 D6 F6 F6 # GREEK CAPITAL LETTER PHI +D7 03A7 L Y D7 F7 D7 D7 F7 F7 # GREEK CAPITAL LETTER CHI +D8 03A8 L Y D8 F8 D8 D8 F8 F8 # GREEK CAPITAL LETTER PSI +D9 03A9 L Y D9 F9 D9 D9 2A 00 # GREEK CAPITAL LETTER OMEGA +DA 03AA L Y DA FA DA C9 2A 00 # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +DB 03AB L Y DB FB DB D5 2A 00 # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +DC 03AC L Y B6 DC B6 E1 2A 00 # GREEK SMALL LETTER ALPHA WITH TONOS +DD 03AD L Y B8 DD B8 E5 2A 00 # GREEK SMALL LETTER EPSILON WITH TONOS +DE 03AE L Y B9 DE B9 E7 2A 00 # GREEK SMALL LETTER ETA WITH TONOS +DF 03AF L Y BA DF BA E9 2A 00 # GREEK SMALL LETTER IOTA WITH TONOS +E0 03B0 L Y E0 E0 E0 F5 2A 00 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +E1 03B1 L Y C1 E1 C1 E1 2A 00 # GREEK SMALL LETTER ALPHA +E2 03B2 L Y C2 E2 C2 E2 E2 E2 # GREEK SMALL LETTER BETA +E3 03B3 L Y C3 E3 C3 E3 E3 E3 # GREEK SMALL LETTER GAMMA +E4 03B4 L Y C4 E4 C4 E4 E4 E4 # GREEK SMALL LETTER DELTA +E5 03B5 L Y C5 E5 C5 E5 2A 00 # GREEK SMALL LETTER EPSILON +E6 03B6 L Y C6 E6 C6 E6 E6 E6 # GREEK SMALL LETTER ZETA +E7 03B7 L Y C7 E7 C7 E7 2A 00 # GREEK SMALL LETTER ETA +E8 03B8 L Y C8 E8 C8 E8 E8 E8 # GREEK SMALL LETTER THETA +E9 03B9 L Y C9 E9 C9 E9 2A 00 # GREEK SMALL LETTER IOTA +EA 03BA L Y CA EA CA EA EA EA # GREEK SMALL LETTER KAPPA +EB 03BB L Y CB EB CB EB EB EB # GREEK SMALL LETTER LAMDA +EC 03BC L Y CC EC CC EC EC EC # GREEK SMALL LETTER MU +ED 03BD L Y CD ED CD ED ED ED # GREEK SMALL LETTER NU +EE 03BE L Y CE EE CE EE EE EE # GREEK SMALL LETTER XI +EF 03BF L Y CF EF CF EF 2A 00 # GREEK SMALL LETTER OMICRON +F0 03C0 L Y D0 F0 D0 F0 F0 F0 # GREEK SMALL LETTER PI +F1 03C1 L Y D1 F1 D1 F1 F1 F1 # GREEK SMALL LETTER RHO +F2 03C2 L Y D3 F2 D3 F2 F2 F2 # GREEK SMALL LETTER FINAL SIGMA +F3 03C3 L Y D3 F3 D3 F3 F3 F3 # GREEK SMALL LETTER SIGMA +F4 03C4 L Y D4 F4 D4 F4 F4 F4 # GREEK SMALL LETTER TAU +F5 03C5 L Y D5 F5 D5 F5 2A 00 # GREEK SMALL LETTER UPSILON +F6 03C6 L Y D6 F6 D6 F6 F6 F6 # GREEK SMALL LETTER PHI +F7 03C7 L Y D7 F7 D7 F7 F7 F7 # GREEK SMALL LETTER CHI +F8 03C8 L Y D8 F8 D8 F8 F8 F8 # GREEK SMALL LETTER PSI +F9 03C9 L Y D9 F9 D9 F9 2A 00 # GREEK SMALL LETTER OMEGA +FA 03CA L Y DA FA DA E9 2A 00 # GREEK SMALL LETTER IOTA WITH DIALYTIKA +FB 03CB L Y DB FB DB F5 2A 00 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA +FC 03CC L Y BC FC BC EF 2A 00 # GREEK SMALL LETTER OMICRON WITH TONOS +FD 03CD L Y BE FD BE F5 2A 00 # GREEK SMALL LETTER UPSILON WITH TONOS +FE 03CE L Y BF FE BF F9 2A 00 # GREEK SMALL LETTER OMEGA WITH TONOS +FF E0FF . N FF FF FF 00 00 00 # <unused> diff --git a/assets/data/iso-8859-8.cmap b/assets/data/iso-8859-8.cmap new file mode 100644 index 0000000..675821c --- /dev/null +++ b/assets/data/iso-8859-8.cmap @@ -0,0 +1,1483 @@ +INTERNAL +/ +N 1017 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D7 > AA +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F7 > BA +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +05D0 > E0 +05D1 > E1 +05D2 > E2 +05D3 > E3 +05D4 > E4 +05D5 > E5 +05D6 > E6 +05D7 > E7 +05D8 > E8 +05D9 > E9 +05DA > EA +05DB > EB +05DC > EC +05DD > ED +05DE > EE +05DF > EF +05E0 > F0 +05E1 > F1 +05E2 > F2 +05E3 > F3 +05E4 > F4 +05E5 > F5 +05E6 > F6 +05E7 > F7 +05E8 > F8 +05E9 > F9 +05EA > FA +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +200E > FD +200F > FE +2017 > DF +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB1D > E9 # unsup: 05D9 05B4 +FB20 > F2 # compat +FB21 > E0 # compat +FB22 > E3 # compat +FB23 > E4 # compat +FB24 > EB # compat +FB25 > EC # compat +FB26 > ED # compat +FB27 > F8 # compat +FB28 > FA # compat +FB29 > 2B # compat +FB2A > F9 # unsup: 05E9 05C1 +FB2B > F9 # unsup: 05E9 05C2 +FB2C > F9 # unsup: 05E9 05BC 05C1 +FB2D > F9 # unsup: 05E9 05BC 05C2 +FB2E > E0 # unsup: 05D0 05B7 +FB2F > E0 # unsup: 05D0 05B8 +FB30 > E0 # unsup: 05D0 05BC +FB31 > E1 # unsup: 05D1 05BC +FB32 > E2 # unsup: 05D2 05BC +FB33 > E3 # unsup: 05D3 05BC +FB34 > E4 # unsup: 05D4 05BC +FB35 > E5 # unsup: 05D5 05BC +FB36 > E6 # unsup: 05D6 05BC +FB38 > E8 # unsup: 05D8 05BC +FB39 > E9 # unsup: 05D9 05BC +FB3A > EA # unsup: 05DA 05BC +FB3B > EB # unsup: 05DB 05BC +FB3C > EC # unsup: 05DC 05BC +FB3E > EE # unsup: 05DE 05BC +FB40 > F0 # unsup: 05E0 05BC +FB41 > F1 # unsup: 05E1 05BC +FB43 > F3 # unsup: 05E3 05BC +FB44 > F4 # unsup: 05E4 05BC +FB46 > F6 # unsup: 05E6 05BC +FB47 > F7 # unsup: 05E7 05BC +FB48 > F8 # unsup: 05E8 05BC +FB49 > F9 # unsup: 05E9 05BC +FB4A > FA # unsup: 05EA 05BC +FB4B > E5 # unsup: 05D5 05B9 +FB4C > E1 # unsup: 05D1 05BF +FB4D > EB # unsup: 05DB 05BF +FB4E > F4 # unsup: 05E4 05BF +FB4F > E0 EC # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 224 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00D7 > AA +00F7 > BA +037E > 3B +0387 > B7 +05D0 > E0 +05D1 > E1 +05D2 > E2 +05D3 > E3 +05D4 > E4 +05D5 > E5 +05D6 > E6 +05D7 > E7 +05D8 > E8 +05D9 > E9 +05DA > EA +05DB > EB +05DC > EC +05DD > ED +05DE > EE +05DF > EF +05E0 > F0 +05E1 > F1 +05E2 > F2 +05E3 > F3 +05E4 > F4 +05E5 > F5 +05E6 > F6 +05E7 > F7 +05E8 > F8 +05E9 > F9 +05EA > FA +1FEF > 60 +1FFD > B4 +200E > FD +200F > FE +2017 > DF +. + +NFD +/ +N 220 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00D7 +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00F7 +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +DF > 2017 +E0 > 05D0 +E1 > 05D1 +E2 > 05D2 +E3 > 05D3 +E4 > 05D4 +E5 > 05D5 +E6 > 05D6 +E7 > 05D7 +E8 > 05D8 +E9 > 05D9 +EA > 05DA +EB > 05DB +EC > 05DC +ED > 05DD +EE > 05DE +EF > 05DF +F0 > 05E0 +F1 > 05E1 +F2 > 05E2 +F3 > 05E3 +F4 > 05E4 +F5 > 05E5 +F6 > 05E6 +F7 > 05E7 +F8 > 05E8 +F9 > 05E9 +FA > 05EA +FD > 200E +FE > 200F +. + +NFC += NFD +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-8.cset b/assets/data/iso-8859-8.cset new file mode 100644 index 0000000..7c80280 --- /dev/null +++ b/assets/data/iso-8859-8.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-8 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 E0A1 . N A1 A1 A1 00 00 00 # <unused> +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 00D7 - Y AA AA AA 00 00 00 # MULTIPLICATION SIGN +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 00F7 - Y BA BA BA 00 00 00 # DIVISION SIGN +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF E0BF . N BF BF BF 00 00 00 # <unused> +C0 E0C0 . N C0 C0 C0 00 00 00 # <unused> +C1 E0C1 . N C1 C1 C1 00 00 00 # <unused> +C2 E0C2 . N C2 C2 C2 00 00 00 # <unused> +C3 E0C3 . N C3 C3 C3 00 00 00 # <unused> +C4 E0C4 . N C4 C4 C4 00 00 00 # <unused> +C5 E0C5 . N C5 C5 C5 00 00 00 # <unused> +C6 E0C6 . N C6 C6 C6 00 00 00 # <unused> +C7 E0C7 . N C7 C7 C7 00 00 00 # <unused> +C8 E0C8 . N C8 C8 C8 00 00 00 # <unused> +C9 E0C9 . N C9 C9 C9 00 00 00 # <unused> +CA E0CA . N CA CA CA 00 00 00 # <unused> +CB E0CB . N CB CB CB 00 00 00 # <unused> +CC E0CC . N CC CC CC 00 00 00 # <unused> +CD E0CD . N CD CD CD 00 00 00 # <unused> +CE E0CE . N CE CE CE 00 00 00 # <unused> +CF E0CF . N CF CF CF 00 00 00 # <unused> +D0 E0D0 . N D0 D0 D0 00 00 00 # <unused> +D1 E0D1 . N D1 D1 D1 00 00 00 # <unused> +D2 E0D2 . N D2 D2 D2 00 00 00 # <unused> +D3 E0D3 . N D3 D3 D3 00 00 00 # <unused> +D4 E0D4 . N D4 D4 D4 00 00 00 # <unused> +D5 E0D5 . N D5 D5 D5 00 00 00 # <unused> +D6 E0D6 . N D6 D6 D6 00 00 00 # <unused> +D7 E0D7 . N D7 D7 D7 00 00 00 # <unused> +D8 E0D8 . N D8 D8 D8 00 00 00 # <unused> +D9 E0D9 . N D9 D9 D9 00 00 00 # <unused> +DA E0DA . N DA DA DA 00 00 00 # <unused> +DB E0DB . N DB DB DB 00 00 00 # <unused> +DC E0DC . N DC DC DC 00 00 00 # <unused> +DD E0DD . N DD DD DD 00 00 00 # <unused> +DE E0DE . N DE DE DE 00 00 00 # <unused> +DF 2017 - Y DF DF DF 00 00 00 # DOUBLE LOW LINE +E0 05D0 L Y E0 E0 E0 E0 E0 E0 # HEBREW LETTER ALEF +E1 05D1 L Y E1 E1 E1 E1 E1 E1 # HEBREW LETTER BET +E2 05D2 L Y E2 E2 E2 E2 E2 E2 # HEBREW LETTER GIMEL +E3 05D3 L Y E3 E3 E3 E3 E3 E3 # HEBREW LETTER DALET +E4 05D4 L Y E4 E4 E4 E4 E4 E4 # HEBREW LETTER HE +E5 05D5 L Y E5 E5 E5 E5 E5 E5 # HEBREW LETTER VAV +E6 05D6 L Y E6 E6 E6 E6 E6 E6 # HEBREW LETTER ZAYIN +E7 05D7 L Y E7 E7 E7 E7 E7 E7 # HEBREW LETTER HET +E8 05D8 L Y E8 E8 E8 E8 E8 E8 # HEBREW LETTER TET +E9 05D9 L Y E9 E9 E9 E9 E9 E9 # HEBREW LETTER YOD +EA 05DA L Y EA EA EA EA EA EA # HEBREW LETTER FINAL KAF +EB 05DB L Y EB EB EB EB EB EB # HEBREW LETTER KAF +EC 05DC L Y EC EC EC EC EC EC # HEBREW LETTER LAMED +ED 05DD L Y ED ED ED ED ED ED # HEBREW LETTER FINAL MEM +EE 05DE L Y EE EE EE EE EE EE # HEBREW LETTER MEM +EF 05DF L Y EF EF EF EF EF EF # HEBREW LETTER FINAL NUN +F0 05E0 L Y F0 F0 F0 F0 F0 F0 # HEBREW LETTER NUN +F1 05E1 L Y F1 F1 F1 F1 F1 F1 # HEBREW LETTER SAMEKH +F2 05E2 L Y F2 F2 F2 F2 F2 F2 # HEBREW LETTER AYIN +F3 05E3 L Y F3 F3 F3 F3 F3 F3 # HEBREW LETTER FINAL PE +F4 05E4 L Y F4 F4 F4 F4 F4 F4 # HEBREW LETTER PE +F5 05E5 L Y F5 F5 F5 F5 F5 F5 # HEBREW LETTER FINAL TSADI +F6 05E6 L Y F6 F6 F6 F6 F6 F6 # HEBREW LETTER TSADI +F7 05E7 L Y F7 F7 F7 F7 F7 F7 # HEBREW LETTER QOF +F8 05E8 L Y F8 F8 F8 F8 F8 F8 # HEBREW LETTER RESH +F9 05E9 L Y F9 F9 F9 F9 F9 F9 # HEBREW LETTER SHIN +FA 05EA L Y FA FA FA FA FA FA # HEBREW LETTER TAV +FB E0FB . N FB FB FB 00 00 00 # <unused> +FC E0FC . N FC FC FC 00 00 00 # <unused> +FD 200E - N FD FD FD 00 00 00 # LEFT-TO-RIGHT MARK +FE 200F - N FE FE FE 00 00 00 # RIGHT-TO-LEFT MARK +FF E0FF . N FF FF FF 00 00 00 # <unused> diff --git a/assets/data/iso-8859-9.cmap b/assets/data/iso-8859-9.cmap new file mode 100644 index 0000000..9f9049e --- /dev/null +++ b/assets/data/iso-8859-9.cmap @@ -0,0 +1,1937 @@ +INTERNAL +/ +N 954 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 / + N 1 + 0306 > D0 + . +0048 > 48 +0049 > 49 / + N 5 + 0300 > CC + 0301 > CD + 0302 > CE + 0307 > DD + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 0327 > DE + . +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 / + N 1 + 0306 > F0 + . +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 0327 > FE + . +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DD > 59 # unsup: 0059 0301 +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FD > 79 # unsup: 0079 0301 +00FF > FF +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > D0 +011F > F0 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > DD +0131 > FD +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C B7 # compat +0140 > 6C B7 # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > DE +015F > FE +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > DC # unsup: 00DC 0304 +01D6 > FC # unsup: 00FC 0304 +01D7 > DC # unsup: 00DC 0301 +01D8 > FC # unsup: 00FC 0301 +01D9 > DC # unsup: 00DC 030C +01DA > FC # unsup: 00FC 030C +01DB > DC # unsup: 00DC 0300 +01DC > FC # unsup: 00FC 0300 +01DE > C4 # unsup: 00C4 0304 +01DF > E4 # unsup: 00E4 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > C6 # unsup: 00C6 0304 +01E3 > E6 # unsup: 00E6 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > C5 # unsup: 00C5 0301 +01FB > E5 # unsup: 00E5 0301 +01FC > C6 # unsup: 00C6 0301 +01FD > E6 # unsup: 00E6 0301 +01FE > D8 # unsup: 00D8 0301 +01FF > F8 # unsup: 00F8 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > D6 # unsup: 00D6 0304 +022B > F6 # unsup: 00F6 0304 +022C > D5 # unsup: 00D5 0304 +022D > F5 # unsup: 00F5 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0385 > A8 # unsup: 00A8 0301 +0387 > B7 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > C7 # unsup: 00C7 0301 +1E09 > E7 # unsup: 00E7 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > CF # unsup: 00CF 0301 +1E2F > EF # unsup: 00EF 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > D5 # unsup: 00D5 0301 +1E4D > F5 # unsup: 00F5 0301 +1E4E > D5 # unsup: 00D5 0308 +1E4F > F5 # unsup: 00F5 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > C2 # unsup: 00C2 0301 +1EA5 > E2 # unsup: 00E2 0301 +1EA6 > C2 # unsup: 00C2 0300 +1EA7 > E2 # unsup: 00E2 0300 +1EA8 > C2 # unsup: 00C2 0309 +1EA9 > E2 # unsup: 00E2 0309 +1EAA > C2 # unsup: 00C2 0303 +1EAB > E2 # unsup: 00E2 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > CA # unsup: 00CA 0301 +1EBF > EA # unsup: 00EA 0301 +1EC0 > CA # unsup: 00CA 0300 +1EC1 > EA # unsup: 00EA 0300 +1EC2 > CA # unsup: 00CA 0309 +1EC3 > EA # unsup: 00EA 0309 +1EC4 > CA # unsup: 00CA 0303 +1EC5 > EA # unsup: 00EA 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > D4 # unsup: 00D4 0301 +1ED1 > F4 # unsup: 00F4 0301 +1ED2 > D4 # unsup: 00D4 0300 +1ED3 > F4 # unsup: 00F4 0300 +1ED4 > D4 # unsup: 00D4 0309 +1ED5 > F4 # unsup: 00F4 0309 +1ED6 > D4 # unsup: 00D4 0303 +1ED7 > F4 # unsup: 00F4 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FC1 > A8 # unsup: 00A8 0342 +1FED > A8 # unsup: 00A8 0300 +1FEE > A8 # unsup: 00A8 0301 +1FEF > 60 +1FFD > B4 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +FFE0 > A2 # compat +FFE1 > A3 # compat +FFE2 > AC # compat +FFE3 > AF # compat +FFE4 > A6 # compat +FFE5 > A5 # compat +. + +STRICT +/ +N 260 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 / + N 6 + 0300 > C0 + 0301 > C1 + 0302 > C2 + 0303 > C3 + 0308 > C4 + 030A > C5 + . +0042 > 42 +0043 > 43 / + N 1 + 0327 > C7 + . +0044 > 44 +0045 > 45 / + N 4 + 0300 > C8 + 0301 > C9 + 0302 > CA + 0308 > CB + . +0046 > 46 +0047 > 47 / + N 1 + 0306 > D0 + . +0048 > 48 +0049 > 49 / + N 5 + 0300 > CC + 0301 > CD + 0302 > CE + 0307 > DD + 0308 > CF + . +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E / + N 1 + 0303 > D1 + . +004F > 4F / + N 5 + 0300 > D2 + 0301 > D3 + 0302 > D4 + 0303 > D5 + 0308 > D6 + . +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 / + N 1 + 0327 > DE + . +0054 > 54 +0055 > 55 / + N 4 + 0300 > D9 + 0301 > DA + 0302 > DB + 0308 > DC + . +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 / + N 6 + 0300 > E0 + 0301 > E1 + 0302 > E2 + 0303 > E3 + 0308 > E4 + 030A > E5 + . +0062 > 62 +0063 > 63 / + N 1 + 0327 > E7 + . +0064 > 64 +0065 > 65 / + N 4 + 0300 > E8 + 0301 > E9 + 0302 > EA + 0308 > EB + . +0066 > 66 +0067 > 67 / + N 1 + 0306 > F0 + . +0068 > 68 +0069 > 69 / + N 4 + 0300 > EC + 0301 > ED + 0302 > EE + 0308 > EF + . +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E / + N 1 + 0303 > F1 + . +006F > 6F / + N 5 + 0300 > F2 + 0301 > F3 + 0302 > F4 + 0303 > F5 + 0308 > F6 + . +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 / + N 1 + 0327 > FE + . +0074 > 74 +0075 > 75 / + N 4 + 0300 > F9 + 0301 > FA + 0302 > FB + 0308 > FC + . +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 / + N 1 + 0308 > FF + . +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +0080 > 80 +0081 > 81 +0082 > 82 +0083 > 83 +0084 > 84 +0085 > 85 +0086 > 86 +0087 > 87 +0088 > 88 +0089 > 89 +008A > 8A +008B > 8B +008C > 8C +008D > 8D +008E > 8E +008F > 8F +0090 > 90 +0091 > 91 +0092 > 92 +0093 > 93 +0094 > 94 +0095 > 95 +0096 > 96 +0097 > 97 +0098 > 98 +0099 > 99 +009A > 9A +009B > 9B +009C > 9C +009D > 9D +009E > 9E +009F > 9F +00A0 > A0 +00A1 > A1 +00A2 > A2 +00A3 > A3 +00A4 > A4 +00A5 > A5 +00A6 > A6 +00A7 > A7 +00A8 > A8 +00A9 > A9 +00AA > AA +00AB > AB +00AC > AC +00AD > AD +00AE > AE +00AF > AF +00B0 > B0 +00B1 > B1 +00B2 > B2 +00B3 > B3 +00B4 > B4 +00B5 > B5 +00B6 > B6 +00B7 > B7 +00B8 > B8 +00B9 > B9 +00BA > BA +00BB > BB +00BC > BC +00BD > BD +00BE > BE +00BF > BF +00C0 > C0 +00C1 > C1 +00C2 > C2 +00C3 > C3 +00C4 > C4 +00C5 > C5 +00C6 > C6 +00C7 > C7 +00C8 > C8 +00C9 > C9 +00CA > CA +00CB > CB +00CC > CC +00CD > CD +00CE > CE +00CF > CF +00D1 > D1 +00D2 > D2 +00D3 > D3 +00D4 > D4 +00D5 > D5 +00D6 > D6 +00D7 > D7 +00D8 > D8 +00D9 > D9 +00DA > DA +00DB > DB +00DC > DC +00DF > DF +00E0 > E0 +00E1 > E1 +00E2 > E2 +00E3 > E3 +00E4 > E4 +00E5 > E5 +00E6 > E6 +00E7 > E7 +00E8 > E8 +00E9 > E9 +00EA > EA +00EB > EB +00EC > EC +00ED > ED +00EE > EE +00EF > EF +00F1 > F1 +00F2 > F2 +00F3 > F3 +00F4 > F4 +00F5 > F5 +00F6 > F6 +00F7 > F7 +00F8 > F8 +00F9 > F9 +00FA > FA +00FB > FB +00FC > FC +00FF > FF +011E > D0 +011F > F0 +0130 > DD +0131 > FD +015E > DE +015F > FE +037E > 3B +0387 > B7 +1FEF > 60 +1FFD > B4 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 0041 0300 +C1 > 0041 0301 +C2 > 0041 0302 +C3 > 0041 0303 +C4 > 0041 0308 +C5 > 0041 030A +C6 > 00C6 +C7 > 0043 0327 +C8 > 0045 0300 +C9 > 0045 0301 +CA > 0045 0302 +CB > 0045 0308 +CC > 0049 0300 +CD > 0049 0301 +CE > 0049 0302 +CF > 0049 0308 +D0 > 0047 0306 +D1 > 004E 0303 +D2 > 004F 0300 +D3 > 004F 0301 +D4 > 004F 0302 +D5 > 004F 0303 +D6 > 004F 0308 +D7 > 00D7 +D8 > 00D8 +D9 > 0055 0300 +DA > 0055 0301 +DB > 0055 0302 +DC > 0055 0308 +DD > 0049 0307 +DE > 0053 0327 +DF > 00DF +E0 > 0061 0300 +E1 > 0061 0301 +E2 > 0061 0302 +E3 > 0061 0303 +E4 > 0061 0308 +E5 > 0061 030A +E6 > 00E6 +E7 > 0063 0327 +E8 > 0065 0300 +E9 > 0065 0301 +EA > 0065 0302 +EB > 0065 0308 +EC > 0069 0300 +ED > 0069 0301 +EE > 0069 0302 +EF > 0069 0308 +F0 > 0067 0306 +F1 > 006E 0303 +F2 > 006F 0300 +F3 > 006F 0301 +F4 > 006F 0302 +F5 > 006F 0303 +F6 > 006F 0308 +F7 > 00F7 +F8 > 00F8 +F9 > 0075 0300 +FA > 0075 0301 +FB > 0075 0302 +FC > 0075 0308 +FD > 0131 +FE > 0073 0327 +FF > 0079 0308 +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 0080 +81 > 0081 +82 > 0082 +83 > 0083 +84 > 0084 +85 > 0085 +86 > 0086 +87 > 0087 +88 > 0088 +89 > 0089 +8A > 008A +8B > 008B +8C > 008C +8D > 008D +8E > 008E +8F > 008F +90 > 0090 +91 > 0091 +92 > 0092 +93 > 0093 +94 > 0094 +95 > 0095 +96 > 0096 +97 > 0097 +98 > 0098 +99 > 0099 +9A > 009A +9B > 009B +9C > 009C +9D > 009D +9E > 009E +9F > 009F +A0 > 00A0 +A1 > 00A1 +A2 > 00A2 +A3 > 00A3 +A4 > 00A4 +A5 > 00A5 +A6 > 00A6 +A7 > 00A7 +A8 > 00A8 +A9 > 00A9 +AA > 00AA +AB > 00AB +AC > 00AC +AD > 00AD +AE > 00AE +AF > 00AF +B0 > 00B0 +B1 > 00B1 +B2 > 00B2 +B3 > 00B3 +B4 > 00B4 +B5 > 00B5 +B6 > 00B6 +B7 > 00B7 +B8 > 00B8 +B9 > 00B9 +BA > 00BA +BB > 00BB +BC > 00BC +BD > 00BD +BE > 00BE +BF > 00BF +C0 > 00C0 +C1 > 00C1 +C2 > 00C2 +C3 > 00C3 +C4 > 00C4 +C5 > 00C5 +C6 > 00C6 +C7 > 00C7 +C8 > 00C8 +C9 > 00C9 +CA > 00CA +CB > 00CB +CC > 00CC +CD > 00CD +CE > 00CE +CF > 00CF +D0 > 011E +D1 > 00D1 +D2 > 00D2 +D3 > 00D3 +D4 > 00D4 +D5 > 00D5 +D6 > 00D6 +D7 > 00D7 +D8 > 00D8 +D9 > 00D9 +DA > 00DA +DB > 00DB +DC > 00DC +DD > 0130 +DE > 015E +DF > 00DF +E0 > 00E0 +E1 > 00E1 +E2 > 00E2 +E3 > 00E3 +E4 > 00E4 +E5 > 00E5 +E6 > 00E6 +E7 > 00E7 +E8 > 00E8 +E9 > 00E9 +EA > 00EA +EB > 00EB +EC > 00EC +ED > 00ED +EE > 00EE +EF > 00EF +F0 > 011F +F1 > 00F1 +F2 > 00F2 +F3 > 00F3 +F4 > 00F4 +F5 > 00F5 +F6 > 00F6 +F7 > 00F7 +F8 > 00F8 +F9 > 00F9 +FA > 00FA +FB > 00FB +FC > 00FC +FD > 0131 +FE > 015F +FF > 00FF +. + +COMP += NFC +. diff --git a/assets/data/iso-8859-9.cset b/assets/data/iso-8859-9.cset new file mode 100644 index 0000000..755241b --- /dev/null +++ b/assets/data/iso-8859-9.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += iso-8859-9 +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 0080 . N 80 80 80 00 00 00 # <unused control> +81 0081 . N 81 81 81 00 00 00 # <unused control> +82 0082 . N 82 82 82 00 00 00 # <unused control> +83 0083 . N 83 83 83 00 00 00 # <unused control> +84 0084 . N 84 84 84 00 00 00 # <unused control> +85 0085 . N 85 85 85 00 00 00 # <unused control> +86 0086 . N 86 86 86 00 00 00 # <unused control> +87 0087 . N 87 87 87 00 00 00 # <unused control> +88 0088 . N 88 88 88 00 00 00 # <unused control> +89 0089 . N 89 89 89 00 00 00 # <unused control> +8A 008A . N 8A 8A 8A 00 00 00 # <unused control> +8B 008B . N 8B 8B 8B 00 00 00 # <unused control> +8C 008C . N 8C 8C 8C 00 00 00 # <unused control> +8D 008D . N 8D 8D 8D 00 00 00 # <unused control> +8E 008E . N 8E 8E 8E 00 00 00 # <unused control> +8F 008F . N 8F 8F 8F 00 00 00 # <unused control> +90 0090 . N 90 90 90 00 00 00 # <unused control> +91 0091 . N 91 91 91 00 00 00 # <unused control> +92 0092 . N 92 92 92 00 00 00 # <unused control> +93 0093 . N 93 93 93 00 00 00 # <unused control> +94 0094 . N 94 94 94 00 00 00 # <unused control> +95 0095 . N 95 95 95 00 00 00 # <unused control> +96 0096 . N 96 96 96 00 00 00 # <unused control> +97 0097 . N 97 97 97 00 00 00 # <unused control> +98 0098 . N 98 98 98 00 00 00 # <unused control> +99 0099 . N 99 99 99 00 00 00 # <unused control> +9A 009A . N 9A 9A 9A 00 00 00 # <unused control> +9B 009B . N 9B 9B 9B 00 00 00 # <unused control> +9C 009C . N 9C 9C 9C 00 00 00 # <unused control> +9D 009D . N 9D 9D 9D 00 00 00 # <unused control> +9E 009E . N 9E 9E 9E 00 00 00 # <unused control> +9F 009F . N 9F 9F 9F 00 00 00 # <unused control> +A0 00A0 W Y A0 A0 A0 00 00 00 # NO-BREAK SPACE +A1 00A1 - Y A1 A1 A1 00 00 00 # INVERTED EXCLAMATION MARK +A2 00A2 - Y A2 A2 A2 00 00 00 # CENT SIGN +A3 00A3 - Y A3 A3 A3 00 00 00 # POUND SIGN +A4 00A4 - Y A4 A4 A4 00 00 00 # CURRENCY SIGN +A5 00A5 - Y A5 A5 A5 00 00 00 # YEN SIGN +A6 00A6 - Y A6 A6 A6 00 00 00 # BROKEN BAR +A7 00A7 - Y A7 A7 A7 00 00 00 # SECTION SIGN +A8 00A8 - Y A8 A8 A8 00 00 00 # DIAERESIS +A9 00A9 - Y A9 A9 A9 00 00 00 # COPYRIGHT SIGN +AA 00AA A Y AA AA AA 00 00 00 # FEMININE ORDINAL INDICATOR +AB 00AB - Y AB AB AB 00 00 00 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +AC 00AC - Y AC AC AC 00 00 00 # NOT SIGN +AD 00AD H N AD AD AD 00 00 00 # SOFT HYPHEN +AE 00AE - Y AE AE AE 00 00 00 # REGISTERED SIGN +AF 00AF - Y AF AF AF 00 00 00 # MACRON +B0 00B0 - Y B0 B0 B0 00 00 00 # DEGREE SIGN +B1 00B1 - Y B1 B1 B1 00 00 00 # PLUS-MINUS SIGN +B2 00B2 - Y B2 B2 B2 00 00 00 # SUPERSCRIPT TWO +B3 00B3 - Y B3 B3 B3 00 00 00 # SUPERSCRIPT THREE +B4 00B4 - Y B4 B4 B4 00 00 00 # ACUTE ACCENT +B5 00B5 A Y B5 B5 B5 00 00 00 # MICRO SIGN +B6 00B6 - Y B6 B6 B6 00 00 00 # PILCROW SIGN +B7 00B7 - Y B7 B7 B7 00 00 00 # MIDDLE DOT +B8 00B8 - Y B8 B8 B8 00 00 00 # CEDILLA +B9 00B9 - Y B9 B9 B9 00 00 00 # SUPERSCRIPT ONE +BA 00BA A Y BA BA BA 00 00 00 # MASCULINE ORDINAL INDICATOR +BB 00BB - Y BB BB BB 00 00 00 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +BC 00BC - Y BC BC BC 00 00 00 # VULGAR FRACTION ONE QUARTER +BD 00BD - Y BD BD BD 00 00 00 # VULGAR FRACTION ONE HALF +BE 00BE - Y BE BE BE 00 00 00 # VULGAR FRACTION THREE QUARTERS +BF 00BF - Y BF BF BF 00 00 00 # INVERTED QUESTION MARK +C0 00C0 L Y C0 E0 C0 41 2A 00 # LATIN CAPITAL LETTER A WITH GRAVE +C1 00C1 L Y C1 E1 C1 41 2A 00 # LATIN CAPITAL LETTER A WITH ACUTE +C2 00C2 L Y C2 E2 C2 41 2A 00 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +C3 00C3 L Y C3 E3 C3 41 2A 00 # LATIN CAPITAL LETTER A WITH TILDE +C4 00C4 L Y C4 E4 C4 41 2A 00 # LATIN CAPITAL LETTER A WITH DIAERESIS +C5 00C5 L Y C5 E5 C5 41 2A 00 # LATIN CAPITAL LETTER A WITH RING ABOVE +C6 00C6 L Y C6 E6 C6 C6 2A 00 # LATIN CAPITAL LETTER AE +C7 00C7 L Y C7 E7 C7 43 63 63 # LATIN CAPITAL LETTER C WITH CEDILLA +C8 00C8 L Y C8 E8 C8 45 2A 00 # LATIN CAPITAL LETTER E WITH GRAVE +C9 00C9 L Y C9 E9 C9 45 2A 00 # LATIN CAPITAL LETTER E WITH ACUTE +CA 00CA L Y CA EA CA 45 2A 00 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +CB 00CB L Y CB EB CB 45 2A 00 # LATIN CAPITAL LETTER E WITH DIAERESIS +CC 00CC L Y CC EC CC 49 2A 00 # LATIN CAPITAL LETTER I WITH GRAVE +CD 00CD L Y CD ED CD 49 2A 00 # LATIN CAPITAL LETTER I WITH ACUTE +CE 00CE L Y CE EE CE 49 2A 00 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +CF 00CF L Y CF EF CF 49 2A 00 # LATIN CAPITAL LETTER I WITH DIAERESIS +D0 011E L Y D0 F0 D0 47 67 67 # LATIN CAPITAL LETTER G WITH BREVE +D1 00D1 L Y D1 F1 D1 4E 6E 6E # LATIN CAPITAL LETTER N WITH TILDE +D2 00D2 L Y D2 F2 D2 4F 2A 00 # LATIN CAPITAL LETTER O WITH GRAVE +D3 00D3 L Y D3 F3 D3 4F 2A 00 # LATIN CAPITAL LETTER O WITH ACUTE +D4 00D4 L Y D4 F4 D4 4F 2A 00 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +D5 00D5 L Y D5 F5 D5 4F 2A 00 # LATIN CAPITAL LETTER O WITH TILDE +D6 00D6 L Y D6 F6 D6 4F 2A 00 # LATIN CAPITAL LETTER O WITH DIAERESIS +D7 00D7 - Y D7 D7 D7 00 00 00 # MULTIPLICATION SIGN +D8 00D8 L Y D8 F8 D8 D8 2A 00 # LATIN CAPITAL LETTER O WITH STROKE +D9 00D9 L Y D9 F9 D9 55 2A 00 # LATIN CAPITAL LETTER U WITH GRAVE +DA 00DA L Y DA FA DA 55 2A 00 # LATIN CAPITAL LETTER U WITH ACUTE +DB 00DB L Y DB FB DB 55 2A 00 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +DC 00DC L Y DC FC DC 55 2A 00 # LATIN CAPITAL LETTER U WITH DIAERESIS +DD 0130 L Y DD 69 DD 49 2A 00 # LATIN CAPITAL LETTER I WITH DOT ABOVE +DE 015E L Y DE FE DE 53 73 73 # LATIN CAPITAL LETTER S WITH CEDILLA +DF 00DF L Y DF DF DF DF DF DF # LATIN SMALL LETTER SHARP S +E0 00E0 L Y C0 E0 C0 61 2A 00 # LATIN SMALL LETTER A WITH GRAVE +E1 00E1 L Y C1 E1 C1 61 2A 00 # LATIN SMALL LETTER A WITH ACUTE +E2 00E2 L Y C2 E2 C2 61 2A 00 # LATIN SMALL LETTER A WITH CIRCUMFLEX +E3 00E3 L Y C3 E3 C3 61 2A 00 # LATIN SMALL LETTER A WITH TILDE +E4 00E4 L Y C4 E4 C4 61 2A 00 # LATIN SMALL LETTER A WITH DIAERESIS +E5 00E5 L Y C5 E5 C5 61 2A 00 # LATIN SMALL LETTER A WITH RING ABOVE +E6 00E6 L Y C6 E6 C6 E6 2A 00 # LATIN SMALL LETTER AE +E7 00E7 L Y C7 E7 C7 63 63 63 # LATIN SMALL LETTER C WITH CEDILLA +E8 00E8 L Y C8 E8 C8 65 2A 00 # LATIN SMALL LETTER E WITH GRAVE +E9 00E9 L Y C9 E9 C9 65 2A 00 # LATIN SMALL LETTER E WITH ACUTE +EA 00EA L Y CA EA CA 65 2A 00 # LATIN SMALL LETTER E WITH CIRCUMFLEX +EB 00EB L Y CB EB CB 65 2A 00 # LATIN SMALL LETTER E WITH DIAERESIS +EC 00EC L Y CC EC CC 69 2A 00 # LATIN SMALL LETTER I WITH GRAVE +ED 00ED L Y CD ED CD 69 2A 00 # LATIN SMALL LETTER I WITH ACUTE +EE 00EE L Y CE EE CE 69 2A 00 # LATIN SMALL LETTER I WITH CIRCUMFLEX +EF 00EF L Y CF EF CF 69 2A 00 # LATIN SMALL LETTER I WITH DIAERESIS +F0 011F L Y D0 F0 D0 67 67 67 # LATIN SMALL LETTER G WITH BREVE +F1 00F1 L Y D1 F1 D1 6E 6E 6E # LATIN SMALL LETTER N WITH TILDE +F2 00F2 L Y D2 F2 D2 6F 2A 00 # LATIN SMALL LETTER O WITH GRAVE +F3 00F3 L Y D3 F3 D3 6F 2A 00 # LATIN SMALL LETTER O WITH ACUTE +F4 00F4 L Y D4 F4 D4 6F 2A 00 # LATIN SMALL LETTER O WITH CIRCUMFLEX +F5 00F5 L Y D5 F5 D5 6F 2A 00 # LATIN SMALL LETTER O WITH TILDE +F6 00F6 L Y D6 F6 D6 6F 2A 00 # LATIN SMALL LETTER O WITH DIAERESIS +F7 00F7 - Y F7 F7 F7 00 00 00 # DIVISION SIGN +F8 00F8 L Y D8 F8 D8 F8 2A 00 # LATIN SMALL LETTER O WITH STROKE +F9 00F9 L Y D9 F9 D9 75 2A 00 # LATIN SMALL LETTER U WITH GRAVE +FA 00FA L Y DA FA DA 75 2A 00 # LATIN SMALL LETTER U WITH ACUTE +FB 00FB L Y DB FB DB 75 2A 00 # LATIN SMALL LETTER U WITH CIRCUMFLEX +FC 00FC L Y DC FC DC 75 2A 00 # LATIN SMALL LETTER U WITH DIAERESIS +FD 0131 L Y 49 FD 49 FD FD FD # LATIN SMALL LETTER DOTLESS I +FE 015F L Y DE FE DE 73 73 73 # LATIN SMALL LETTER S WITH CEDILLA +FF 00FF L Y FF FF FF 79 79 79 # LATIN SMALL LETTER Y WITH DIAERESIS diff --git a/assets/data/koi8-r.cmap b/assets/data/koi8-r.cmap new file mode 100644 index 0000000..0157f93 --- /dev/null +++ b/assets/data/koi8-r.cmap @@ -0,0 +1,1857 @@ +INTERNAL +/ +N 1039 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +00A0 > 9A +00A9 > BF +00B0 > 9C +00B2 > 9D +00B7 > 9E +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F7 > 9F +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C 9E # compat +0140 > 6C 9E # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0387 > 9E +0400 > E5 # unsup: 0415 0300 +0401 > B3 +0403 > E7 # unsup: 0413 0301 +040C > EB # unsup: 041A 0301 +040D > E9 # unsup: 0418 0300 +040E > F5 # unsup: 0423 0306 +0410 > E1 +0411 > E2 +0412 > F7 +0413 > E7 +0414 > E4 +0415 > E5 / + N 1 + 0308 > B3 + . +0416 > F6 +0417 > FA +0418 > E9 / + N 1 + 0306 > EA + . +0419 > EA +041A > EB +041B > EC +041C > ED +041D > EE +041E > EF +041F > F0 +0420 > F2 +0421 > F3 +0422 > F4 +0423 > F5 +0424 > E6 +0425 > E8 +0426 > E3 +0427 > FE +0428 > FB +0429 > FD +042A > FF +042B > F9 +042C > F8 +042D > FC +042E > E0 +042F > F1 +0430 > C1 +0431 > C2 +0432 > D7 +0433 > C7 +0434 > C4 +0435 > C5 / + N 1 + 0308 > A3 + . +0436 > D6 +0437 > DA +0438 > C9 / + N 1 + 0306 > CA + . +0439 > CA +043A > CB +043B > CC +043C > CD +043D > CE +043E > CF +043F > D0 +0440 > D2 +0441 > D3 +0442 > D4 +0443 > D5 +0444 > C6 +0445 > C8 +0446 > C3 +0447 > DE +0448 > DB +0449 > DD +044A > DF +044B > D9 +044C > D8 +044D > DC +044E > C0 +044F > D1 +0450 > C5 # unsup: 0435 0300 +0451 > A3 +0453 > C7 # unsup: 0433 0301 +045C > CB # unsup: 043A 0301 +045D > C9 # unsup: 0438 0300 +045E > D5 # unsup: 0443 0306 +04C1 > F6 # unsup: 0416 0306 +04C2 > D6 # unsup: 0436 0306 +04D0 > E1 # unsup: 0410 0306 +04D1 > C1 # unsup: 0430 0306 +04D2 > E1 # unsup: 0410 0308 +04D3 > C1 # unsup: 0430 0308 +04D6 > E5 # unsup: 0415 0306 +04D7 > C5 # unsup: 0435 0306 +04DC > F6 # unsup: 0416 0308 +04DD > D6 # unsup: 0436 0308 +04DE > FA # unsup: 0417 0308 +04DF > DA # unsup: 0437 0308 +04E2 > E9 # unsup: 0418 0304 +04E3 > C9 # unsup: 0438 0304 +04E4 > E9 # unsup: 0418 0308 +04E5 > C9 # unsup: 0438 0308 +04E6 > EF # unsup: 041E 0308 +04E7 > CF # unsup: 043E 0308 +04EC > FC # unsup: 042D 0308 +04ED > DC # unsup: 044D 0308 +04EE > F5 # unsup: 0423 0304 +04EF > D5 # unsup: 0443 0304 +04F0 > F5 # unsup: 0423 0308 +04F1 > D5 # unsup: 0443 0308 +04F2 > F5 # unsup: 0423 030B +04F3 > D5 # unsup: 0443 030B +04F4 > FE # unsup: 0427 0308 +04F5 > DE # unsup: 0447 0308 +04F8 > F9 # unsup: 042B 0308 +04F9 > D9 # unsup: 044B 0308 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +221A > 96 +2248 > 97 +2264 > 98 +2265 > 99 +2320 > 93 +2321 > 9B +2500 > 80 +2502 > 81 +250C > 82 +2510 > 83 +2514 > 84 +2518 > 85 +251C > 86 +2524 > 87 +252C > 88 +2534 > 89 +253C > 8A +2550 > A0 +2551 > A1 +2552 > A2 +2553 > A4 +2554 > A5 +2555 > A6 +2556 > A7 +2557 > A8 +2558 > A9 +2559 > AA +255A > AB +255B > AC +255C > AD +255D > AE +255E > AF +255F > B0 +2560 > B1 +2561 > B2 +2562 > B4 +2563 > B5 +2564 > B6 +2565 > B7 +2566 > B8 +2567 > B9 +2568 > BA +2569 > BB +256A > BC +256B > BD +256C > BE +2580 > 8B +2584 > 8C +2588 > 8D +258C > 8E +2590 > 8F +2591 > 90 +2592 > 91 +2593 > 92 +25A0 > 94 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +00A0 > 9A +00A9 > BF +00B0 > 9C +00B2 > 9D +00B7 > 9E +00F7 > 9F +037E > 3B +0387 > 9E +0401 > B3 +0410 > E1 +0411 > E2 +0412 > F7 +0413 > E7 +0414 > E4 +0415 > E5 / + N 1 + 0308 > B3 + . +0416 > F6 +0417 > FA +0418 > E9 / + N 1 + 0306 > EA + . +0419 > EA +041A > EB +041B > EC +041C > ED +041D > EE +041E > EF +041F > F0 +0420 > F2 +0421 > F3 +0422 > F4 +0423 > F5 +0424 > E6 +0425 > E8 +0426 > E3 +0427 > FE +0428 > FB +0429 > FD +042A > FF +042B > F9 +042C > F8 +042D > FC +042E > E0 +042F > F1 +0430 > C1 +0431 > C2 +0432 > D7 +0433 > C7 +0434 > C4 +0435 > C5 / + N 1 + 0308 > A3 + . +0436 > D6 +0437 > DA +0438 > C9 / + N 1 + 0306 > CA + . +0439 > CA +043A > CB +043B > CC +043C > CD +043D > CE +043E > CF +043F > D0 +0440 > D2 +0441 > D3 +0442 > D4 +0443 > D5 +0444 > C6 +0445 > C8 +0446 > C3 +0447 > DE +0448 > DB +0449 > DD +044A > DF +044B > D9 +044C > D8 +044D > DC +044E > C0 +044F > D1 +0451 > A3 +1FEF > 60 +2022 > 95 +221A > 96 +2248 > 97 +2264 > 98 +2265 > 99 +2320 > 93 +2321 > 9B +2500 > 80 +2502 > 81 +250C > 82 +2510 > 83 +2514 > 84 +2518 > 85 +251C > 86 +2524 > 87 +252C > 88 +2534 > 89 +253C > 8A +2550 > A0 +2551 > A1 +2552 > A2 +2553 > A4 +2554 > A5 +2555 > A6 +2556 > A7 +2557 > A8 +2558 > A9 +2559 > AA +255A > AB +255B > AC +255C > AD +255D > AE +255E > AF +255F > B0 +2560 > B1 +2561 > B2 +2562 > B4 +2563 > B5 +2564 > B6 +2565 > B7 +2566 > B8 +2567 > B9 +2568 > BA +2569 > BB +256A > BC +256B > BD +256C > BE +2580 > 8B +2584 > 8C +2588 > 8D +258C > 8E +2590 > 8F +2591 > 90 +2592 > 91 +2593 > 92 +25A0 > 94 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 2500 +81 > 2502 +82 > 250C +83 > 2510 +84 > 2514 +85 > 2518 +86 > 251C +87 > 2524 +88 > 252C +89 > 2534 +8A > 253C +8B > 2580 +8C > 2584 +8D > 2588 +8E > 258C +8F > 2590 +90 > 2591 +91 > 2592 +92 > 2593 +93 > 2320 +94 > 25A0 +95 > 2022 +96 > 221A +97 > 2248 +98 > 2264 +99 > 2265 +9A > 00A0 +9B > 2321 +9C > 00B0 +9D > 00B2 +9E > 00B7 +9F > 00F7 +A0 > 2550 +A1 > 2551 +A2 > 2552 +A3 > 0435 0308 +A4 > 2553 +A5 > 2554 +A6 > 2555 +A7 > 2556 +A8 > 2557 +A9 > 2558 +AA > 2559 +AB > 255A +AC > 255B +AD > 255C +AE > 255D +AF > 255E +B0 > 255F +B1 > 2560 +B2 > 2561 +B3 > 0415 0308 +B4 > 2562 +B5 > 2563 +B6 > 2564 +B7 > 2565 +B8 > 2566 +B9 > 2567 +BA > 2568 +BB > 2569 +BC > 256A +BD > 256B +BE > 256C +BF > 00A9 +C0 > 044E +C1 > 0430 +C2 > 0431 +C3 > 0446 +C4 > 0434 +C5 > 0435 +C6 > 0444 +C7 > 0433 +C8 > 0445 +C9 > 0438 +CA > 0438 0306 +CB > 043A +CC > 043B +CD > 043C +CE > 043D +CF > 043E +D0 > 043F +D1 > 044F +D2 > 0440 +D3 > 0441 +D4 > 0442 +D5 > 0443 +D6 > 0436 +D7 > 0432 +D8 > 044C +D9 > 044B +DA > 0437 +DB > 0448 +DC > 044D +DD > 0449 +DE > 0447 +DF > 044A +E0 > 042E +E1 > 0410 +E2 > 0411 +E3 > 0426 +E4 > 0414 +E5 > 0415 +E6 > 0424 +E7 > 0413 +E8 > 0425 +E9 > 0418 +EA > 0418 0306 +EB > 041A +EC > 041B +ED > 041C +EE > 041D +EF > 041E +F0 > 041F +F1 > 042F +F2 > 0420 +F3 > 0421 +F4 > 0422 +F5 > 0423 +F6 > 0416 +F7 > 0412 +F8 > 042C +F9 > 042B +FA > 0417 +FB > 0428 +FC > 042D +FD > 0429 +FE > 0427 +FF > 042A +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 2500 +81 > 2502 +82 > 250C +83 > 2510 +84 > 2514 +85 > 2518 +86 > 251C +87 > 2524 +88 > 252C +89 > 2534 +8A > 253C +8B > 2580 +8C > 2584 +8D > 2588 +8E > 258C +8F > 2590 +90 > 2591 +91 > 2592 +92 > 2593 +93 > 2320 +94 > 25A0 +95 > 2022 +96 > 221A +97 > 2248 +98 > 2264 +99 > 2265 +9A > 00A0 +9B > 2321 +9C > 00B0 +9D > 00B2 +9E > 00B7 +9F > 00F7 +A0 > 2550 +A1 > 2551 +A2 > 2552 +A3 > 0451 +A4 > 2553 +A5 > 2554 +A6 > 2555 +A7 > 2556 +A8 > 2557 +A9 > 2558 +AA > 2559 +AB > 255A +AC > 255B +AD > 255C +AE > 255D +AF > 255E +B0 > 255F +B1 > 2560 +B2 > 2561 +B3 > 0401 +B4 > 2562 +B5 > 2563 +B6 > 2564 +B7 > 2565 +B8 > 2566 +B9 > 2567 +BA > 2568 +BB > 2569 +BC > 256A +BD > 256B +BE > 256C +BF > 00A9 +C0 > 044E +C1 > 0430 +C2 > 0431 +C3 > 0446 +C4 > 0434 +C5 > 0435 +C6 > 0444 +C7 > 0433 +C8 > 0445 +C9 > 0438 +CA > 0439 +CB > 043A +CC > 043B +CD > 043C +CE > 043D +CF > 043E +D0 > 043F +D1 > 044F +D2 > 0440 +D3 > 0441 +D4 > 0442 +D5 > 0443 +D6 > 0436 +D7 > 0432 +D8 > 044C +D9 > 044B +DA > 0437 +DB > 0448 +DC > 044D +DD > 0449 +DE > 0447 +DF > 044A +E0 > 042E +E1 > 0410 +E2 > 0411 +E3 > 0426 +E4 > 0414 +E5 > 0415 +E6 > 0424 +E7 > 0413 +E8 > 0425 +E9 > 0418 +EA > 0419 +EB > 041A +EC > 041B +ED > 041C +EE > 041D +EF > 041E +F0 > 041F +F1 > 042F +F2 > 0420 +F3 > 0421 +F4 > 0422 +F5 > 0423 +F6 > 0416 +F7 > 0412 +F8 > 042C +F9 > 042B +FA > 0417 +FB > 0428 +FC > 042D +FD > 0429 +FE > 0427 +FF > 042A +. + +COMP += NFC +. diff --git a/assets/data/koi8-r.cset b/assets/data/koi8-r.cset new file mode 100644 index 0000000..e53197c --- /dev/null +++ b/assets/data/koi8-r.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += koi8-r +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 2500 . N 80 80 80 00 00 00 # <unused special> +81 2502 . N 81 81 81 00 00 00 # <unused special> +82 250C . N 82 82 82 00 00 00 # <unused special> +83 2510 . N 83 83 83 00 00 00 # <unused special> +84 2514 . N 84 84 84 00 00 00 # <unused special> +85 2518 . N 85 85 85 00 00 00 # <unused special> +86 251C . N 86 86 86 00 00 00 # <unused special> +87 2524 . N 87 87 87 00 00 00 # <unused special> +88 252C . N 88 88 88 00 00 00 # <unused special> +89 2534 . N 89 89 89 00 00 00 # <unused special> +8A 253C . N 8A 8A 8A 00 00 00 # <unused special> +8B 2580 . N 8B 8B 8B 00 00 00 # <unused special> +8C 2584 . N 8C 8C 8C 00 00 00 # <unused special> +8D 2588 . N 8D 8D 8D 00 00 00 # <unused special> +8E 258C . N 8E 8E 8E 00 00 00 # <unused special> +8F 2590 . N 8F 8F 8F 00 00 00 # <unused special> +90 2591 . N 90 90 90 00 00 00 # <unused special> +91 2592 . N 91 91 91 00 00 00 # <unused special> +92 2593 . N 92 92 92 00 00 00 # <unused special> +93 2320 . N 93 93 93 00 00 00 # <unused special> +94 25A0 . N 94 94 94 00 00 00 # <unused special> +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 221A . N 96 96 96 00 00 00 # <unused special> +97 2248 . N 97 97 97 00 00 00 # <unused special> +98 2264 . N 98 98 98 00 00 00 # <unused special> +99 2265 . N 99 99 99 00 00 00 # <unused special> +9A 00A0 W Y 9A 9A 9A 00 00 00 # NO-BREAK SPACE +9B 2321 . N 9B 9B 9B 00 00 00 # <unused special> +9C 00B0 - Y 9C 9C 9C 00 00 00 # DEGREE SIGN +9D 00B2 - Y 9D 9D 9D 00 00 00 # SUPERSCRIPT TWO +9E 00B7 - Y 9E 9E 9E 00 00 00 # MIDDLE DOT +9F 00F7 - Y 9F 9F 9F 00 00 00 # DIVISION SIGN +A0 2550 . N A0 A0 A0 00 00 00 # <unused special> +A1 2551 . N A1 A1 A1 00 00 00 # <unused special> +A2 2552 . N A2 A2 A2 00 00 00 # <unused special> +A3 0451 L Y B3 A3 B3 A3 A3 A3 # CYRILLIC SMALL LETTER IO +A4 2553 . N A4 A4 A4 00 00 00 # <unused special> +A5 2554 . N A5 A5 A5 00 00 00 # <unused special> +A6 2555 . N A6 A6 A6 00 00 00 # <unused special> +A7 2556 . N A7 A7 A7 00 00 00 # <unused special> +A8 2557 . N A8 A8 A8 00 00 00 # <unused special> +A9 2558 . N A9 A9 A9 00 00 00 # <unused special> +AA 2559 . N AA AA AA 00 00 00 # <unused special> +AB 255A . N AB AB AB 00 00 00 # <unused special> +AC 255B . N AC AC AC 00 00 00 # <unused special> +AD 255C . N AD AD AD 00 00 00 # <unused special> +AE 255D . N AE AE AE 00 00 00 # <unused special> +AF 255E . N AF AF AF 00 00 00 # <unused special> +B0 255F . N B0 B0 B0 00 00 00 # <unused special> +B1 2560 . N B1 B1 B1 00 00 00 # <unused special> +B2 2561 . N B2 B2 B2 00 00 00 # <unused special> +B3 0401 L Y B3 A3 B3 B3 A3 A3 # CYRILLIC CAPITAL LETTER IO +B4 2562 . N B4 B4 B4 00 00 00 # <unused special> +B5 2563 . N B5 B5 B5 00 00 00 # <unused special> +B6 2564 . N B6 B6 B6 00 00 00 # <unused special> +B7 2565 . N B7 B7 B7 00 00 00 # <unused special> +B8 2566 . N B8 B8 B8 00 00 00 # <unused special> +B9 2567 . N B9 B9 B9 00 00 00 # <unused special> +BA 2568 . N BA BA BA 00 00 00 # <unused special> +BB 2569 . N BB BB BB 00 00 00 # <unused special> +BC 256A . N BC BC BC 00 00 00 # <unused special> +BD 256B . N BD BD BD 00 00 00 # <unused special> +BE 256C . N BE BE BE 00 00 00 # <unused special> +BF 00A9 - Y BF BF BF 00 00 00 # COPYRIGHT SIGN +C0 044E L Y E0 C0 E0 C0 2A 00 # CYRILLIC SMALL LETTER YU +C1 0430 L Y E1 C1 E1 C1 2A 00 # CYRILLIC SMALL LETTER A +C2 0431 L Y E2 C2 E2 C2 C2 C2 # CYRILLIC SMALL LETTER BE +C3 0446 L Y E3 C3 E3 C3 C3 C3 # CYRILLIC SMALL LETTER TSE +C4 0434 L Y E4 C4 E4 C4 C4 C4 # CYRILLIC SMALL LETTER DE +C5 0435 L Y E5 C5 E5 C5 2A 00 # CYRILLIC SMALL LETTER IE +C6 0444 L Y E6 C6 E6 C6 C6 C6 # CYRILLIC SMALL LETTER EF +C7 0433 L Y E7 C7 E7 C7 C7 C7 # CYRILLIC SMALL LETTER GHE +C8 0445 L Y E8 C8 E8 C8 C8 C8 # CYRILLIC SMALL LETTER HA +C9 0438 L Y E9 C9 E9 C9 2A 00 # CYRILLIC SMALL LETTER I +CA 0439 L Y EA CA EA CA CA CA # CYRILLIC SMALL LETTER SHORT I +CB 043A L Y EB CB EB CB CB CB # CYRILLIC SMALL LETTER KA +CC 043B L Y EC CC EC CC CC CC # CYRILLIC SMALL LETTER EL +CD 043C L Y ED CD ED CD CD CD # CYRILLIC SMALL LETTER EM +CE 043D L Y EE CE EE CE CE CE # CYRILLIC SMALL LETTER EN +CF 043E L Y EF CF EF CF 2A 00 # CYRILLIC SMALL LETTER O +D0 043F L Y F0 D0 F0 D0 D0 D0 # CYRILLIC SMALL LETTER PE +D1 044F L Y F1 D1 F1 D1 2A 00 # CYRILLIC SMALL LETTER YA +D2 0440 L Y F2 D2 F2 D2 D2 D2 # CYRILLIC SMALL LETTER ER +D3 0441 L Y F3 D3 F3 D3 D3 D3 # CYRILLIC SMALL LETTER ES +D4 0442 L Y F4 D4 F4 D4 D4 D4 # CYRILLIC SMALL LETTER TE +D5 0443 L Y F5 D5 F5 D5 2A 00 # CYRILLIC SMALL LETTER U +D6 0436 L Y F6 D6 F6 D6 D6 D6 # CYRILLIC SMALL LETTER ZHE +D7 0432 L Y F7 D7 F7 D7 D7 D7 # CYRILLIC SMALL LETTER VE +D8 044C L Y F8 D8 F8 D8 D8 D8 # CYRILLIC SMALL LETTER SOFT SIGN +D9 044B L Y F9 D9 F9 D9 2A 00 # CYRILLIC SMALL LETTER YERU +DA 0437 L Y FA DA FA DA DA DA # CYRILLIC SMALL LETTER ZE +DB 0448 L Y FB DB FB DB DB DB # CYRILLIC SMALL LETTER SHA +DC 044D L Y FC DC FC DC 2A 00 # CYRILLIC SMALL LETTER E +DD 0449 L Y FD DD FD DD DD DD # CYRILLIC SMALL LETTER SHCHA +DE 0447 L Y FE DE FE DE DE DE # CYRILLIC SMALL LETTER CHE +DF 044A L Y FF DF FF DF DF DF # CYRILLIC SMALL LETTER HARD SIGN +E0 042E L Y E0 C0 E0 E0 2A 00 # CYRILLIC CAPITAL LETTER YU +E1 0410 L Y E1 C1 E1 E1 2A 00 # CYRILLIC CAPITAL LETTER A +E2 0411 L Y E2 C2 E2 E2 C2 C2 # CYRILLIC CAPITAL LETTER BE +E3 0426 L Y E3 C3 E3 E3 C3 C3 # CYRILLIC CAPITAL LETTER TSE +E4 0414 L Y E4 C4 E4 E4 C4 C4 # CYRILLIC CAPITAL LETTER DE +E5 0415 L Y E5 C5 E5 E5 2A 00 # CYRILLIC CAPITAL LETTER IE +E6 0424 L Y E6 C6 E6 E6 C6 C6 # CYRILLIC CAPITAL LETTER EF +E7 0413 L Y E7 C7 E7 E7 C7 C7 # CYRILLIC CAPITAL LETTER GHE +E8 0425 L Y E8 C8 E8 E8 C8 C8 # CYRILLIC CAPITAL LETTER HA +E9 0418 L Y E9 C9 E9 E9 2A 00 # CYRILLIC CAPITAL LETTER I +EA 0419 L Y EA CA EA EA CA CA # CYRILLIC CAPITAL LETTER SHORT I +EB 041A L Y EB CB EB EB CB CB # CYRILLIC CAPITAL LETTER KA +EC 041B L Y EC CC EC EC CC CC # CYRILLIC CAPITAL LETTER EL +ED 041C L Y ED CD ED ED CD CD # CYRILLIC CAPITAL LETTER EM +EE 041D L Y EE CE EE EE CE CE # CYRILLIC CAPITAL LETTER EN +EF 041E L Y EF CF EF EF 2A 00 # CYRILLIC CAPITAL LETTER O +F0 041F L Y F0 D0 F0 F0 D0 D0 # CYRILLIC CAPITAL LETTER PE +F1 042F L Y F1 D1 F1 F1 2A 00 # CYRILLIC CAPITAL LETTER YA +F2 0420 L Y F2 D2 F2 F2 D2 D2 # CYRILLIC CAPITAL LETTER ER +F3 0421 L Y F3 D3 F3 F3 D3 D3 # CYRILLIC CAPITAL LETTER ES +F4 0422 L Y F4 D4 F4 F4 D4 D4 # CYRILLIC CAPITAL LETTER TE +F5 0423 L Y F5 D5 F5 F5 2A 00 # CYRILLIC CAPITAL LETTER U +F6 0416 L Y F6 D6 F6 F6 D6 D6 # CYRILLIC CAPITAL LETTER ZHE +F7 0412 L Y F7 D7 F7 F7 D7 D7 # CYRILLIC CAPITAL LETTER VE +F8 042C L Y F8 D8 F8 F8 D8 D8 # CYRILLIC CAPITAL LETTER SOFT SIGN +F9 042B L Y F9 D9 F9 F9 2A 00 # CYRILLIC CAPITAL LETTER YERU +FA 0417 L Y FA DA FA FA DA DA # CYRILLIC CAPITAL LETTER ZE +FB 0428 L Y FB DB FB FB DB DB # CYRILLIC CAPITAL LETTER SHA +FC 042D L Y FC DC FC FC 2A 00 # CYRILLIC CAPITAL LETTER E +FD 0429 L Y FD DD FD FD DD DD # CYRILLIC CAPITAL LETTER SHCHA +FE 0427 L Y FE DE FE FE DE DE # CYRILLIC CAPITAL LETTER CHE +FF 042A L Y FF DF FF FF DF DF # CYRILLIC CAPITAL LETTER HARD SIGN diff --git a/assets/data/koi8-u.cmap b/assets/data/koi8-u.cmap new file mode 100644 index 0000000..5b35880 --- /dev/null +++ b/assets/data/koi8-u.cmap @@ -0,0 +1,1869 @@ +INTERNAL +/ +N 1039 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +00A0 > 9A +00A9 > BF +00B0 > 9C +00B2 > 9D +00B7 > 9E +00C0 > 41 # unsup: 0041 0300 +00C1 > 41 # unsup: 0041 0301 +00C2 > 41 # unsup: 0041 0302 +00C3 > 41 # unsup: 0041 0303 +00C4 > 41 # unsup: 0041 0308 +00C5 > 41 # unsup: 0041 030A +00C6 > 41 45 # compat +00C7 > 43 # unsup: 0043 0327 +00C8 > 45 # unsup: 0045 0300 +00C9 > 45 # unsup: 0045 0301 +00CA > 45 # unsup: 0045 0302 +00CB > 45 # unsup: 0045 0308 +00CC > 49 # unsup: 0049 0300 +00CD > 49 # unsup: 0049 0301 +00CE > 49 # unsup: 0049 0302 +00CF > 49 # unsup: 0049 0308 +00D1 > 4E # unsup: 004E 0303 +00D2 > 4F # unsup: 004F 0300 +00D3 > 4F # unsup: 004F 0301 +00D4 > 4F # unsup: 004F 0302 +00D5 > 4F # unsup: 004F 0303 +00D6 > 4F # unsup: 004F 0308 +00D9 > 55 # unsup: 0055 0300 +00DA > 55 # unsup: 0055 0301 +00DB > 55 # unsup: 0055 0302 +00DC > 55 # unsup: 0055 0308 +00DD > 59 # unsup: 0059 0301 +00E0 > 61 # unsup: 0061 0300 +00E1 > 61 # unsup: 0061 0301 +00E2 > 61 # unsup: 0061 0302 +00E3 > 61 # unsup: 0061 0303 +00E4 > 61 # unsup: 0061 0308 +00E5 > 61 # unsup: 0061 030A +00E6 > 61 65 # compat +00E7 > 63 # unsup: 0063 0327 +00E8 > 65 # unsup: 0065 0300 +00E9 > 65 # unsup: 0065 0301 +00EA > 65 # unsup: 0065 0302 +00EB > 65 # unsup: 0065 0308 +00EC > 69 # unsup: 0069 0300 +00ED > 69 # unsup: 0069 0301 +00EE > 69 # unsup: 0069 0302 +00EF > 69 # unsup: 0069 0308 +00F1 > 6E # unsup: 006E 0303 +00F2 > 6F # unsup: 006F 0300 +00F3 > 6F # unsup: 006F 0301 +00F4 > 6F # unsup: 006F 0302 +00F5 > 6F # unsup: 006F 0303 +00F6 > 6F # unsup: 006F 0308 +00F7 > 9F +00F9 > 75 # unsup: 0075 0300 +00FA > 75 # unsup: 0075 0301 +00FB > 75 # unsup: 0075 0302 +00FC > 75 # unsup: 0075 0308 +00FD > 79 # unsup: 0079 0301 +00FF > 79 # unsup: 0079 0308 +0100 > 41 # unsup: 0041 0304 +0101 > 61 # unsup: 0061 0304 +0102 > 41 # unsup: 0041 0306 +0103 > 61 # unsup: 0061 0306 +0104 > 41 # unsup: 0041 0328 +0105 > 61 # unsup: 0061 0328 +0106 > 43 # unsup: 0043 0301 +0107 > 63 # unsup: 0063 0301 +0108 > 43 # unsup: 0043 0302 +0109 > 63 # unsup: 0063 0302 +010A > 43 # unsup: 0043 0307 +010B > 63 # unsup: 0063 0307 +010C > 43 # unsup: 0043 030C +010D > 63 # unsup: 0063 030C +010E > 44 # unsup: 0044 030C +010F > 64 # unsup: 0064 030C +0112 > 45 # unsup: 0045 0304 +0113 > 65 # unsup: 0065 0304 +0114 > 45 # unsup: 0045 0306 +0115 > 65 # unsup: 0065 0306 +0116 > 45 # unsup: 0045 0307 +0117 > 65 # unsup: 0065 0307 +0118 > 45 # unsup: 0045 0328 +0119 > 65 # unsup: 0065 0328 +011A > 45 # unsup: 0045 030C +011B > 65 # unsup: 0065 030C +011C > 47 # unsup: 0047 0302 +011D > 67 # unsup: 0067 0302 +011E > 47 # unsup: 0047 0306 +011F > 67 # unsup: 0067 0306 +0120 > 47 # unsup: 0047 0307 +0121 > 67 # unsup: 0067 0307 +0122 > 47 # unsup: 0047 0327 +0123 > 67 # unsup: 0067 0327 +0124 > 48 # unsup: 0048 0302 +0125 > 68 # unsup: 0068 0302 +0128 > 49 # unsup: 0049 0303 +0129 > 69 # unsup: 0069 0303 +012A > 49 # unsup: 0049 0304 +012B > 69 # unsup: 0069 0304 +012C > 49 # unsup: 0049 0306 +012D > 69 # unsup: 0069 0306 +012E > 49 # unsup: 0049 0328 +012F > 69 # unsup: 0069 0328 +0130 > 49 # unsup: 0049 0307 +0132 > 49 4A # compat +0133 > 69 6A # compat +0134 > 4A # unsup: 004A 0302 +0135 > 6A # unsup: 006A 0302 +0136 > 4B # unsup: 004B 0327 +0137 > 6B # unsup: 006B 0327 +0139 > 4C # unsup: 004C 0301 +013A > 6C # unsup: 006C 0301 +013B > 4C # unsup: 004C 0327 +013C > 6C # unsup: 006C 0327 +013D > 4C # unsup: 004C 030C +013E > 6C # unsup: 006C 030C +013F > 4C 9E # compat +0140 > 6C 9E # compat +0143 > 4E # unsup: 004E 0301 +0144 > 6E # unsup: 006E 0301 +0145 > 4E # unsup: 004E 0327 +0146 > 6E # unsup: 006E 0327 +0147 > 4E # unsup: 004E 030C +0148 > 6E # unsup: 006E 030C +014C > 4F # unsup: 004F 0304 +014D > 6F # unsup: 006F 0304 +014E > 4F # unsup: 004F 0306 +014F > 6F # unsup: 006F 0306 +0150 > 4F # unsup: 004F 030B +0151 > 6F # unsup: 006F 030B +0152 > 4F 45 # compat +0153 > 6F 65 # compat +0154 > 52 # unsup: 0052 0301 +0155 > 72 # unsup: 0072 0301 +0156 > 52 # unsup: 0052 0327 +0157 > 72 # unsup: 0072 0327 +0158 > 52 # unsup: 0052 030C +0159 > 72 # unsup: 0072 030C +015A > 53 # unsup: 0053 0301 +015B > 73 # unsup: 0073 0301 +015C > 53 # unsup: 0053 0302 +015D > 73 # unsup: 0073 0302 +015E > 53 # unsup: 0053 0327 +015F > 73 # unsup: 0073 0327 +0160 > 53 # unsup: 0053 030C +0161 > 73 # unsup: 0073 030C +0162 > 54 # unsup: 0054 0327 +0163 > 74 # unsup: 0074 0327 +0164 > 54 # unsup: 0054 030C +0165 > 74 # unsup: 0074 030C +0168 > 55 # unsup: 0055 0303 +0169 > 75 # unsup: 0075 0303 +016A > 55 # unsup: 0055 0304 +016B > 75 # unsup: 0075 0304 +016C > 55 # unsup: 0055 0306 +016D > 75 # unsup: 0075 0306 +016E > 55 # unsup: 0055 030A +016F > 75 # unsup: 0075 030A +0170 > 55 # unsup: 0055 030B +0171 > 75 # unsup: 0075 030B +0172 > 55 # unsup: 0055 0328 +0173 > 75 # unsup: 0075 0328 +0174 > 57 # unsup: 0057 0302 +0175 > 77 # unsup: 0077 0302 +0176 > 59 # unsup: 0059 0302 +0177 > 79 # unsup: 0079 0302 +0178 > 59 # unsup: 0059 0308 +0179 > 5A # unsup: 005A 0301 +017A > 7A # unsup: 007A 0301 +017B > 5A # unsup: 005A 0307 +017C > 7A # unsup: 007A 0307 +017D > 5A # unsup: 005A 030C +017E > 7A # unsup: 007A 030C +017F > 73 # compat +01A0 > 4F # unsup: 004F 031B +01A1 > 6F # unsup: 006F 031B +01AF > 55 # unsup: 0055 031B +01B0 > 75 # unsup: 0075 031B +01C4 > 44 5A # unsup: 0044 005A 030C +01C5 > 44 7A # unsup: 0044 007A 030C +01C6 > 64 7A # unsup: 0064 007A 030C +01C7 > 4C 4A # compat +01C8 > 4C 6A # compat +01C9 > 6C 6A # compat +01CA > 4E 4A # compat +01CB > 4E 6A # compat +01CC > 6E 6A # compat +01CD > 41 # unsup: 0041 030C +01CE > 61 # unsup: 0061 030C +01CF > 49 # unsup: 0049 030C +01D0 > 69 # unsup: 0069 030C +01D1 > 4F # unsup: 004F 030C +01D2 > 6F # unsup: 006F 030C +01D3 > 55 # unsup: 0055 030C +01D4 > 75 # unsup: 0075 030C +01D5 > 55 # unsup: 0055 0308 0304 +01D6 > 75 # unsup: 0075 0308 0304 +01D7 > 55 # unsup: 0055 0308 0301 +01D8 > 75 # unsup: 0075 0308 0301 +01D9 > 55 # unsup: 0055 0308 030C +01DA > 75 # unsup: 0075 0308 030C +01DB > 55 # unsup: 0055 0308 0300 +01DC > 75 # unsup: 0075 0308 0300 +01DE > 41 # unsup: 0041 0308 0304 +01DF > 61 # unsup: 0061 0308 0304 +01E0 > 41 # unsup: 0041 0307 0304 +01E1 > 61 # unsup: 0061 0307 0304 +01E2 > 41 45 # unsup: 0041 0045 0304 +01E3 > 61 65 # unsup: 0061 0065 0304 +01E6 > 47 # unsup: 0047 030C +01E7 > 67 # unsup: 0067 030C +01E8 > 4B # unsup: 004B 030C +01E9 > 6B # unsup: 006B 030C +01EA > 4F # unsup: 004F 0328 +01EB > 6F # unsup: 006F 0328 +01EC > 4F # unsup: 004F 0328 0304 +01ED > 6F # unsup: 006F 0328 0304 +01F0 > 6A # unsup: 006A 030C +01F1 > 44 5A # compat +01F2 > 44 7A # compat +01F3 > 64 7A # compat +01F4 > 47 # unsup: 0047 0301 +01F5 > 67 # unsup: 0067 0301 +01F8 > 4E # unsup: 004E 0300 +01F9 > 6E # unsup: 006E 0300 +01FA > 41 # unsup: 0041 030A 0301 +01FB > 61 # unsup: 0061 030A 0301 +01FC > 41 45 # unsup: 0041 0045 0301 +01FD > 61 65 # unsup: 0061 0065 0301 +0200 > 41 # unsup: 0041 030F +0201 > 61 # unsup: 0061 030F +0202 > 41 # unsup: 0041 0311 +0203 > 61 # unsup: 0061 0311 +0204 > 45 # unsup: 0045 030F +0205 > 65 # unsup: 0065 030F +0206 > 45 # unsup: 0045 0311 +0207 > 65 # unsup: 0065 0311 +0208 > 49 # unsup: 0049 030F +0209 > 69 # unsup: 0069 030F +020A > 49 # unsup: 0049 0311 +020B > 69 # unsup: 0069 0311 +020C > 4F # unsup: 004F 030F +020D > 6F # unsup: 006F 030F +020E > 4F # unsup: 004F 0311 +020F > 6F # unsup: 006F 0311 +0210 > 52 # unsup: 0052 030F +0211 > 72 # unsup: 0072 030F +0212 > 52 # unsup: 0052 0311 +0213 > 72 # unsup: 0072 0311 +0214 > 55 # unsup: 0055 030F +0215 > 75 # unsup: 0075 030F +0216 > 55 # unsup: 0055 0311 +0217 > 75 # unsup: 0075 0311 +0218 > 53 # unsup: 0053 0326 +0219 > 73 # unsup: 0073 0326 +021A > 54 # unsup: 0054 0326 +021B > 74 # unsup: 0074 0326 +021E > 48 # unsup: 0048 030C +021F > 68 # unsup: 0068 030C +0226 > 41 # unsup: 0041 0307 +0227 > 61 # unsup: 0061 0307 +0228 > 45 # unsup: 0045 0327 +0229 > 65 # unsup: 0065 0327 +022A > 4F # unsup: 004F 0308 0304 +022B > 6F # unsup: 006F 0308 0304 +022C > 4F # unsup: 004F 0303 0304 +022D > 6F # unsup: 006F 0303 0304 +022E > 4F # unsup: 004F 0307 +022F > 6F # unsup: 006F 0307 +0230 > 4F # unsup: 004F 0307 0304 +0231 > 6F # unsup: 006F 0307 0304 +0232 > 59 # unsup: 0059 0304 +0233 > 79 # unsup: 0079 0304 +0300 > 0 # unsup +0301 > 0 # unsup +0302 > 0 # unsup +0303 > 0 # unsup +0304 > 0 # unsup +0305 > 0 # unsup +0306 > 0 # unsup +0307 > 0 # unsup +0308 > 0 # unsup +0309 > 0 # unsup +030A > 0 # unsup +030B > 0 # unsup +030C > 0 # unsup +030D > 0 # unsup +030E > 0 # unsup +030F > 0 # unsup +0310 > 0 # unsup +0311 > 0 # unsup +0312 > 0 # unsup +0313 > 0 # unsup +0314 > 0 # unsup +0315 > 0 # unsup +0316 > 0 # unsup +0317 > 0 # unsup +0318 > 0 # unsup +0319 > 0 # unsup +031A > 0 # unsup +031B > 0 # unsup +031C > 0 # unsup +031D > 0 # unsup +031E > 0 # unsup +031F > 0 # unsup +0320 > 0 # unsup +0321 > 0 # unsup +0322 > 0 # unsup +0323 > 0 # unsup +0324 > 0 # unsup +0325 > 0 # unsup +0326 > 0 # unsup +0327 > 0 # unsup +0328 > 0 # unsup +0329 > 0 # unsup +032A > 0 # unsup +032B > 0 # unsup +032C > 0 # unsup +032D > 0 # unsup +032E > 0 # unsup +032F > 0 # unsup +0330 > 0 # unsup +0331 > 0 # unsup +0332 > 0 # unsup +0333 > 0 # unsup +0334 > 0 # unsup +0335 > 0 # unsup +0336 > 0 # unsup +0337 > 0 # unsup +0338 > 0 # unsup +0339 > 0 # unsup +033A > 0 # unsup +033B > 0 # unsup +033C > 0 # unsup +033D > 0 # unsup +033E > 0 # unsup +033F > 0 # unsup +0340 > 0 # unsup +0341 > 0 # unsup +0342 > 0 # unsup +0343 > 0 # unsup +0344 > 0 # unsup +0345 > 0 # unsup +037E > 3B +0387 > 9E +0400 > E5 # unsup: 0415 0300 +0401 > B3 +0403 > E7 # unsup: 0413 0301 +0404 > B4 +0406 > B6 / + N 1 + 0308 > B7 + . +0407 > B7 +040C > EB # unsup: 041A 0301 +040D > E9 # unsup: 0418 0300 +040E > F5 # unsup: 0423 0306 +0410 > E1 +0411 > E2 +0412 > F7 +0413 > E7 +0414 > E4 +0415 > E5 / + N 1 + 0308 > B3 + . +0416 > F6 +0417 > FA +0418 > E9 / + N 1 + 0306 > EA + . +0419 > EA +041A > EB +041B > EC +041C > ED +041D > EE +041E > EF +041F > F0 +0420 > F2 +0421 > F3 +0422 > F4 +0423 > F5 +0424 > E6 +0425 > E8 +0426 > E3 +0427 > FE +0428 > FB +0429 > FD +042A > FF +042B > F9 +042C > F8 +042D > FC +042E > E0 +042F > F1 +0430 > C1 +0431 > C2 +0432 > D7 +0433 > C7 +0434 > C4 +0435 > C5 / + N 1 + 0308 > A3 + . +0436 > D6 +0437 > DA +0438 > C9 / + N 1 + 0306 > CA + . +0439 > CA +043A > CB +043B > CC +043C > CD +043D > CE +043E > CF +043F > D0 +0440 > D2 +0441 > D3 +0442 > D4 +0443 > D5 +0444 > C6 +0445 > C8 +0446 > C3 +0447 > DE +0448 > DB +0449 > DD +044A > DF +044B > D9 +044C > D8 +044D > DC +044E > C0 +044F > D1 +0450 > C5 # unsup: 0435 0300 +0451 > A3 +0453 > C7 # unsup: 0433 0301 +0454 > A4 +0456 > A6 / + N 1 + 0308 > A7 + . +0457 > A7 +045C > CB # unsup: 043A 0301 +045D > C9 # unsup: 0438 0300 +045E > D5 # unsup: 0443 0306 +0490 > BD +0491 > AD +04C1 > F6 # unsup: 0416 0306 +04C2 > D6 # unsup: 0436 0306 +04D0 > E1 # unsup: 0410 0306 +04D1 > C1 # unsup: 0430 0306 +04D2 > E1 # unsup: 0410 0308 +04D3 > C1 # unsup: 0430 0308 +04D6 > E5 # unsup: 0415 0306 +04D7 > C5 # unsup: 0435 0306 +04DC > F6 # unsup: 0416 0308 +04DD > D6 # unsup: 0436 0308 +04DE > FA # unsup: 0417 0308 +04DF > DA # unsup: 0437 0308 +04E2 > E9 # unsup: 0418 0304 +04E3 > C9 # unsup: 0438 0304 +04E4 > E9 # unsup: 0418 0308 +04E5 > C9 # unsup: 0438 0308 +04E6 > EF # unsup: 041E 0308 +04E7 > CF # unsup: 043E 0308 +04EC > FC # unsup: 042D 0308 +04ED > DC # unsup: 044D 0308 +04EE > F5 # unsup: 0423 0304 +04EF > D5 # unsup: 0443 0304 +04F0 > F5 # unsup: 0423 0308 +04F1 > D5 # unsup: 0443 0308 +04F2 > F5 # unsup: 0423 030B +04F3 > D5 # unsup: 0443 030B +04F4 > FE # unsup: 0427 0308 +04F5 > DE # unsup: 0447 0308 +04F8 > F9 # unsup: 042B 0308 +04F9 > D9 # unsup: 044B 0308 +1E00 > 41 # unsup: 0041 0325 +1E01 > 61 # unsup: 0061 0325 +1E02 > 42 # unsup: 0042 0307 +1E03 > 62 # unsup: 0062 0307 +1E04 > 42 # unsup: 0042 0323 +1E05 > 62 # unsup: 0062 0323 +1E06 > 42 # unsup: 0042 0331 +1E07 > 62 # unsup: 0062 0331 +1E08 > 43 # unsup: 0043 0327 0301 +1E09 > 63 # unsup: 0063 0327 0301 +1E0A > 44 # unsup: 0044 0307 +1E0B > 64 # unsup: 0064 0307 +1E0C > 44 # unsup: 0044 0323 +1E0D > 64 # unsup: 0064 0323 +1E0E > 44 # unsup: 0044 0331 +1E0F > 64 # unsup: 0064 0331 +1E10 > 44 # unsup: 0044 0327 +1E11 > 64 # unsup: 0064 0327 +1E12 > 44 # unsup: 0044 032D +1E13 > 64 # unsup: 0064 032D +1E14 > 45 # unsup: 0045 0304 0300 +1E15 > 65 # unsup: 0065 0304 0300 +1E16 > 45 # unsup: 0045 0304 0301 +1E17 > 65 # unsup: 0065 0304 0301 +1E18 > 45 # unsup: 0045 032D +1E19 > 65 # unsup: 0065 032D +1E1A > 45 # unsup: 0045 0330 +1E1B > 65 # unsup: 0065 0330 +1E1C > 45 # unsup: 0045 0327 0306 +1E1D > 65 # unsup: 0065 0327 0306 +1E1E > 46 # unsup: 0046 0307 +1E1F > 66 # unsup: 0066 0307 +1E20 > 47 # unsup: 0047 0304 +1E21 > 67 # unsup: 0067 0304 +1E22 > 48 # unsup: 0048 0307 +1E23 > 68 # unsup: 0068 0307 +1E24 > 48 # unsup: 0048 0323 +1E25 > 68 # unsup: 0068 0323 +1E26 > 48 # unsup: 0048 0308 +1E27 > 68 # unsup: 0068 0308 +1E28 > 48 # unsup: 0048 0327 +1E29 > 68 # unsup: 0068 0327 +1E2A > 48 # unsup: 0048 032E +1E2B > 68 # unsup: 0068 032E +1E2C > 49 # unsup: 0049 0330 +1E2D > 69 # unsup: 0069 0330 +1E2E > 49 # unsup: 0049 0308 0301 +1E2F > 69 # unsup: 0069 0308 0301 +1E30 > 4B # unsup: 004B 0301 +1E31 > 6B # unsup: 006B 0301 +1E32 > 4B # unsup: 004B 0323 +1E33 > 6B # unsup: 006B 0323 +1E34 > 4B # unsup: 004B 0331 +1E35 > 6B # unsup: 006B 0331 +1E36 > 4C # unsup: 004C 0323 +1E37 > 6C # unsup: 006C 0323 +1E38 > 4C # unsup: 004C 0323 0304 +1E39 > 6C # unsup: 006C 0323 0304 +1E3A > 4C # unsup: 004C 0331 +1E3B > 6C # unsup: 006C 0331 +1E3C > 4C # unsup: 004C 032D +1E3D > 6C # unsup: 006C 032D +1E3E > 4D # unsup: 004D 0301 +1E3F > 6D # unsup: 006D 0301 +1E40 > 4D # unsup: 004D 0307 +1E41 > 6D # unsup: 006D 0307 +1E42 > 4D # unsup: 004D 0323 +1E43 > 6D # unsup: 006D 0323 +1E44 > 4E # unsup: 004E 0307 +1E45 > 6E # unsup: 006E 0307 +1E46 > 4E # unsup: 004E 0323 +1E47 > 6E # unsup: 006E 0323 +1E48 > 4E # unsup: 004E 0331 +1E49 > 6E # unsup: 006E 0331 +1E4A > 4E # unsup: 004E 032D +1E4B > 6E # unsup: 006E 032D +1E4C > 4F # unsup: 004F 0303 0301 +1E4D > 6F # unsup: 006F 0303 0301 +1E4E > 4F # unsup: 004F 0303 0308 +1E4F > 6F # unsup: 006F 0303 0308 +1E50 > 4F # unsup: 004F 0304 0300 +1E51 > 6F # unsup: 006F 0304 0300 +1E52 > 4F # unsup: 004F 0304 0301 +1E53 > 6F # unsup: 006F 0304 0301 +1E54 > 50 # unsup: 0050 0301 +1E55 > 70 # unsup: 0070 0301 +1E56 > 50 # unsup: 0050 0307 +1E57 > 70 # unsup: 0070 0307 +1E58 > 52 # unsup: 0052 0307 +1E59 > 72 # unsup: 0072 0307 +1E5A > 52 # unsup: 0052 0323 +1E5B > 72 # unsup: 0072 0323 +1E5C > 52 # unsup: 0052 0323 0304 +1E5D > 72 # unsup: 0072 0323 0304 +1E5E > 52 # unsup: 0052 0331 +1E5F > 72 # unsup: 0072 0331 +1E60 > 53 # unsup: 0053 0307 +1E61 > 73 # unsup: 0073 0307 +1E62 > 53 # unsup: 0053 0323 +1E63 > 73 # unsup: 0073 0323 +1E64 > 53 # unsup: 0053 0301 0307 +1E65 > 73 # unsup: 0073 0301 0307 +1E66 > 53 # unsup: 0053 030C 0307 +1E67 > 73 # unsup: 0073 030C 0307 +1E68 > 53 # unsup: 0053 0323 0307 +1E69 > 73 # unsup: 0073 0323 0307 +1E6A > 54 # unsup: 0054 0307 +1E6B > 74 # unsup: 0074 0307 +1E6C > 54 # unsup: 0054 0323 +1E6D > 74 # unsup: 0074 0323 +1E6E > 54 # unsup: 0054 0331 +1E6F > 74 # unsup: 0074 0331 +1E70 > 54 # unsup: 0054 032D +1E71 > 74 # unsup: 0074 032D +1E72 > 55 # unsup: 0055 0324 +1E73 > 75 # unsup: 0075 0324 +1E74 > 55 # unsup: 0055 0330 +1E75 > 75 # unsup: 0075 0330 +1E76 > 55 # unsup: 0055 032D +1E77 > 75 # unsup: 0075 032D +1E78 > 55 # unsup: 0055 0303 0301 +1E79 > 75 # unsup: 0075 0303 0301 +1E7A > 55 # unsup: 0055 0304 0308 +1E7B > 75 # unsup: 0075 0304 0308 +1E7C > 56 # unsup: 0056 0303 +1E7D > 76 # unsup: 0076 0303 +1E7E > 56 # unsup: 0056 0323 +1E7F > 76 # unsup: 0076 0323 +1E80 > 57 # unsup: 0057 0300 +1E81 > 77 # unsup: 0077 0300 +1E82 > 57 # unsup: 0057 0301 +1E83 > 77 # unsup: 0077 0301 +1E84 > 57 # unsup: 0057 0308 +1E85 > 77 # unsup: 0077 0308 +1E86 > 57 # unsup: 0057 0307 +1E87 > 77 # unsup: 0077 0307 +1E88 > 57 # unsup: 0057 0323 +1E89 > 77 # unsup: 0077 0323 +1E8A > 58 # unsup: 0058 0307 +1E8B > 78 # unsup: 0078 0307 +1E8C > 58 # unsup: 0058 0308 +1E8D > 78 # unsup: 0078 0308 +1E8E > 59 # unsup: 0059 0307 +1E8F > 79 # unsup: 0079 0307 +1E90 > 5A # unsup: 005A 0302 +1E91 > 7A # unsup: 007A 0302 +1E92 > 5A # unsup: 005A 0323 +1E93 > 7A # unsup: 007A 0323 +1E94 > 5A # unsup: 005A 0331 +1E95 > 7A # unsup: 007A 0331 +1E96 > 68 # unsup: 0068 0331 +1E97 > 74 # unsup: 0074 0308 +1E98 > 77 # unsup: 0077 030A +1E99 > 79 # unsup: 0079 030A +1E9B > 73 # unsup: 0073 0307 +1EA0 > 41 # unsup: 0041 0323 +1EA1 > 61 # unsup: 0061 0323 +1EA2 > 41 # unsup: 0041 0309 +1EA3 > 61 # unsup: 0061 0309 +1EA4 > 41 # unsup: 0041 0302 0301 +1EA5 > 61 # unsup: 0061 0302 0301 +1EA6 > 41 # unsup: 0041 0302 0300 +1EA7 > 61 # unsup: 0061 0302 0300 +1EA8 > 41 # unsup: 0041 0302 0309 +1EA9 > 61 # unsup: 0061 0302 0309 +1EAA > 41 # unsup: 0041 0302 0303 +1EAB > 61 # unsup: 0061 0302 0303 +1EAC > 41 # unsup: 0041 0323 0302 +1EAD > 61 # unsup: 0061 0323 0302 +1EAE > 41 # unsup: 0041 0306 0301 +1EAF > 61 # unsup: 0061 0306 0301 +1EB0 > 41 # unsup: 0041 0306 0300 +1EB1 > 61 # unsup: 0061 0306 0300 +1EB2 > 41 # unsup: 0041 0306 0309 +1EB3 > 61 # unsup: 0061 0306 0309 +1EB4 > 41 # unsup: 0041 0306 0303 +1EB5 > 61 # unsup: 0061 0306 0303 +1EB6 > 41 # unsup: 0041 0323 0306 +1EB7 > 61 # unsup: 0061 0323 0306 +1EB8 > 45 # unsup: 0045 0323 +1EB9 > 65 # unsup: 0065 0323 +1EBA > 45 # unsup: 0045 0309 +1EBB > 65 # unsup: 0065 0309 +1EBC > 45 # unsup: 0045 0303 +1EBD > 65 # unsup: 0065 0303 +1EBE > 45 # unsup: 0045 0302 0301 +1EBF > 65 # unsup: 0065 0302 0301 +1EC0 > 45 # unsup: 0045 0302 0300 +1EC1 > 65 # unsup: 0065 0302 0300 +1EC2 > 45 # unsup: 0045 0302 0309 +1EC3 > 65 # unsup: 0065 0302 0309 +1EC4 > 45 # unsup: 0045 0302 0303 +1EC5 > 65 # unsup: 0065 0302 0303 +1EC6 > 45 # unsup: 0045 0323 0302 +1EC7 > 65 # unsup: 0065 0323 0302 +1EC8 > 49 # unsup: 0049 0309 +1EC9 > 69 # unsup: 0069 0309 +1ECA > 49 # unsup: 0049 0323 +1ECB > 69 # unsup: 0069 0323 +1ECC > 4F # unsup: 004F 0323 +1ECD > 6F # unsup: 006F 0323 +1ECE > 4F # unsup: 004F 0309 +1ECF > 6F # unsup: 006F 0309 +1ED0 > 4F # unsup: 004F 0302 0301 +1ED1 > 6F # unsup: 006F 0302 0301 +1ED2 > 4F # unsup: 004F 0302 0300 +1ED3 > 6F # unsup: 006F 0302 0300 +1ED4 > 4F # unsup: 004F 0302 0309 +1ED5 > 6F # unsup: 006F 0302 0309 +1ED6 > 4F # unsup: 004F 0302 0303 +1ED7 > 6F # unsup: 006F 0302 0303 +1ED8 > 4F # unsup: 004F 0323 0302 +1ED9 > 6F # unsup: 006F 0323 0302 +1EDA > 4F # unsup: 004F 031B 0301 +1EDB > 6F # unsup: 006F 031B 0301 +1EDC > 4F # unsup: 004F 031B 0300 +1EDD > 6F # unsup: 006F 031B 0300 +1EDE > 4F # unsup: 004F 031B 0309 +1EDF > 6F # unsup: 006F 031B 0309 +1EE0 > 4F # unsup: 004F 031B 0303 +1EE1 > 6F # unsup: 006F 031B 0303 +1EE2 > 4F # unsup: 004F 031B 0323 +1EE3 > 6F # unsup: 006F 031B 0323 +1EE4 > 55 # unsup: 0055 0323 +1EE5 > 75 # unsup: 0075 0323 +1EE6 > 55 # unsup: 0055 0309 +1EE7 > 75 # unsup: 0075 0309 +1EE8 > 55 # unsup: 0055 031B 0301 +1EE9 > 75 # unsup: 0075 031B 0301 +1EEA > 55 # unsup: 0055 031B 0300 +1EEB > 75 # unsup: 0075 031B 0300 +1EEC > 55 # unsup: 0055 031B 0309 +1EED > 75 # unsup: 0075 031B 0309 +1EEE > 55 # unsup: 0055 031B 0303 +1EEF > 75 # unsup: 0075 031B 0303 +1EF0 > 55 # unsup: 0055 031B 0323 +1EF1 > 75 # unsup: 0075 031B 0323 +1EF2 > 59 # unsup: 0059 0300 +1EF3 > 79 # unsup: 0079 0300 +1EF4 > 59 # unsup: 0059 0323 +1EF5 > 79 # unsup: 0079 0323 +1EF6 > 59 # unsup: 0059 0309 +1EF7 > 79 # unsup: 0079 0309 +1EF8 > 59 # unsup: 0059 0303 +1EF9 > 79 # unsup: 0079 0303 +1FEF > 60 +2000 > 20 # compat +2001 > 20 # compat +2002 > 20 # compat +2003 > 20 # compat +2004 > 20 # compat +2005 > 20 # compat +2006 > 20 # compat +2007 > 20 # compat +2008 > 20 # compat +2009 > 20 # compat +200A > 20 # compat +2022 > 95 +2024 > 2E # compat +2025 > 2E 2E # compat +2026 > 2E 2E 2E # compat +202F > 20 # compat +203C > 21 21 # compat +2047 > 3F 3F # compat +2048 > 3F 21 # compat +2049 > 21 3F # compat +205F > 20 # compat +221A > 96 +2248 > 97 +2264 > 98 +2265 > 99 +2320 > 93 +2321 > 9B +2500 > 80 +2502 > 81 +250C > 82 +2510 > 83 +2514 > 84 +2518 > 85 +251C > 86 +2524 > 87 +252C > 88 +2534 > 89 +253C > 8A +2550 > A0 +2551 > A1 +2552 > A2 +2554 > A5 +2557 > A8 +2558 > A9 +2559 > AA +255A > AB +255B > AC +255D > AE +255E > AF +255F > B0 +2560 > B1 +2561 > B2 +2563 > B5 +2566 > B8 +2567 > B9 +2568 > BA +2569 > BB +256A > BC +256C > BE +2580 > 8B +2584 > 8C +2588 > 8D +258C > 8E +2590 > 8F +2591 > 90 +2592 > 91 +2593 > 92 +25A0 > 94 +FB00 > 66 66 # compat +FB01 > 66 69 # compat +FB02 > 66 6C # compat +FB03 > 66 66 69 # compat +FB04 > 66 66 6C # compat +FB05 > 73 74 # compat +FB06 > 73 74 # compat +FB29 > 2B # compat +FE30 > 2E 2E # compat +FE33 > 5F # compat +FE34 > 5F # compat +FE35 > 28 # compat +FE36 > 29 # compat +FE37 > 7B # compat +FE38 > 7D # compat +FE47 > 5B # compat +FE48 > 5D # compat +FE4D > 5F # compat +FE4E > 5F # compat +FE4F > 5F # compat +FE50 > 2C # compat +FE52 > 2E # compat +FE54 > 3B # compat +FE55 > 3A # compat +FE56 > 3F # compat +FE57 > 21 # compat +FE59 > 28 # compat +FE5A > 29 # compat +FE5B > 7B # compat +FE5C > 7D # compat +FE5F > 23 # compat +FE60 > 26 # compat +FE61 > 2A # compat +FE62 > 2B # compat +FE63 > 2D # compat +FE64 > 3C # compat +FE65 > 3E # compat +FE66 > 3D # compat +FE68 > 5C # compat +FE69 > 24 # compat +FE6A > 25 # compat +FE6B > 40 # compat +FF01 > 21 # compat +FF02 > 22 # compat +FF03 > 23 # compat +FF04 > 24 # compat +FF05 > 25 # compat +FF06 > 26 # compat +FF07 > 27 # compat +FF08 > 28 # compat +FF09 > 29 # compat +FF0A > 2A # compat +FF0B > 2B # compat +FF0C > 2C # compat +FF0D > 2D # compat +FF0E > 2E # compat +FF0F > 2F # compat +FF10 > 30 # compat +FF11 > 31 # compat +FF12 > 32 # compat +FF13 > 33 # compat +FF14 > 34 # compat +FF15 > 35 # compat +FF16 > 36 # compat +FF17 > 37 # compat +FF18 > 38 # compat +FF19 > 39 # compat +FF1A > 3A # compat +FF1B > 3B # compat +FF1C > 3C # compat +FF1D > 3D # compat +FF1E > 3E # compat +FF1F > 3F # compat +FF20 > 40 # compat +FF21 > 41 # compat +FF22 > 42 # compat +FF23 > 43 # compat +FF24 > 44 # compat +FF25 > 45 # compat +FF26 > 46 # compat +FF27 > 47 # compat +FF28 > 48 # compat +FF29 > 49 # compat +FF2A > 4A # compat +FF2B > 4B # compat +FF2C > 4C # compat +FF2D > 4D # compat +FF2E > 4E # compat +FF2F > 4F # compat +FF30 > 50 # compat +FF31 > 51 # compat +FF32 > 52 # compat +FF33 > 53 # compat +FF34 > 54 # compat +FF35 > 55 # compat +FF36 > 56 # compat +FF37 > 57 # compat +FF38 > 58 # compat +FF39 > 59 # compat +FF3A > 5A # compat +FF3B > 5B # compat +FF3C > 5C # compat +FF3D > 5D # compat +FF3E > 5E # compat +FF3F > 5F # compat +FF40 > 60 # compat +FF41 > 61 # compat +FF42 > 62 # compat +FF43 > 63 # compat +FF44 > 64 # compat +FF45 > 65 # compat +FF46 > 66 # compat +FF47 > 67 # compat +FF48 > 68 # compat +FF49 > 69 # compat +FF4A > 6A # compat +FF4B > 6B # compat +FF4C > 6C # compat +FF4D > 6D # compat +FF4E > 6E # compat +FF4F > 6F # compat +FF50 > 70 # compat +FF51 > 71 # compat +FF52 > 72 # compat +FF53 > 73 # compat +FF54 > 74 # compat +FF55 > 75 # compat +FF56 > 76 # compat +FF57 > 77 # compat +FF58 > 78 # compat +FF59 > 79 # compat +FF5A > 7A # compat +FF5B > 7B # compat +FF5C > 7C # compat +FF5D > 7D # compat +FF5E > 7E # compat +. + +STRICT +/ +N 259 +0000 > 00 +0001 > 01 +0002 > 02 +0003 > 03 +0004 > 04 +0005 > 05 +0006 > 06 +0007 > 07 +0008 > 08 +0009 > 09 +000A > 0A +000B > 0B +000C > 0C +000D > 0D +000E > 0E +000F > 0F +0010 > 10 +0011 > 11 +0012 > 12 +0013 > 13 +0014 > 14 +0015 > 15 +0016 > 16 +0017 > 17 +0018 > 18 +0019 > 19 +001A > 1A +001B > 1B +001C > 1C +001D > 1D +001E > 1E +001F > 1F +0020 > 20 +0021 > 21 +0022 > 22 +0023 > 23 +0024 > 24 +0025 > 25 +0026 > 26 +0027 > 27 +0028 > 28 +0029 > 29 +002A > 2A +002B > 2B +002C > 2C +002D > 2D +002E > 2E +002F > 2F +0030 > 30 +0031 > 31 +0032 > 32 +0033 > 33 +0034 > 34 +0035 > 35 +0036 > 36 +0037 > 37 +0038 > 38 +0039 > 39 +003A > 3A +003B > 3B +003C > 3C +003D > 3D +003E > 3E +003F > 3F +0040 > 40 +0041 > 41 +0042 > 42 +0043 > 43 +0044 > 44 +0045 > 45 +0046 > 46 +0047 > 47 +0048 > 48 +0049 > 49 +004A > 4A +004B > 4B +004C > 4C +004D > 4D +004E > 4E +004F > 4F +0050 > 50 +0051 > 51 +0052 > 52 +0053 > 53 +0054 > 54 +0055 > 55 +0056 > 56 +0057 > 57 +0058 > 58 +0059 > 59 +005A > 5A +005B > 5B +005C > 5C +005D > 5D +005E > 5E +005F > 5F +0060 > 60 +0061 > 61 +0062 > 62 +0063 > 63 +0064 > 64 +0065 > 65 +0066 > 66 +0067 > 67 +0068 > 68 +0069 > 69 +006A > 6A +006B > 6B +006C > 6C +006D > 6D +006E > 6E +006F > 6F +0070 > 70 +0071 > 71 +0072 > 72 +0073 > 73 +0074 > 74 +0075 > 75 +0076 > 76 +0077 > 77 +0078 > 78 +0079 > 79 +007A > 7A +007B > 7B +007C > 7C +007D > 7D +007E > 7E +007F > 7F +00A0 > 9A +00A9 > BF +00B0 > 9C +00B2 > 9D +00B7 > 9E +00F7 > 9F +037E > 3B +0387 > 9E +0401 > B3 +0404 > B4 +0406 > B6 / + N 1 + 0308 > B7 + . +0407 > B7 +0410 > E1 +0411 > E2 +0412 > F7 +0413 > E7 +0414 > E4 +0415 > E5 / + N 1 + 0308 > B3 + . +0416 > F6 +0417 > FA +0418 > E9 / + N 1 + 0306 > EA + . +0419 > EA +041A > EB +041B > EC +041C > ED +041D > EE +041E > EF +041F > F0 +0420 > F2 +0421 > F3 +0422 > F4 +0423 > F5 +0424 > E6 +0425 > E8 +0426 > E3 +0427 > FE +0428 > FB +0429 > FD +042A > FF +042B > F9 +042C > F8 +042D > FC +042E > E0 +042F > F1 +0430 > C1 +0431 > C2 +0432 > D7 +0433 > C7 +0434 > C4 +0435 > C5 / + N 1 + 0308 > A3 + . +0436 > D6 +0437 > DA +0438 > C9 / + N 1 + 0306 > CA + . +0439 > CA +043A > CB +043B > CC +043C > CD +043D > CE +043E > CF +043F > D0 +0440 > D2 +0441 > D3 +0442 > D4 +0443 > D5 +0444 > C6 +0445 > C8 +0446 > C3 +0447 > DE +0448 > DB +0449 > DD +044A > DF +044B > D9 +044C > D8 +044D > DC +044E > C0 +044F > D1 +0451 > A3 +0454 > A4 +0456 > A6 / + N 1 + 0308 > A7 + . +0457 > A7 +0490 > BD +0491 > AD +1FEF > 60 +2022 > 95 +221A > 96 +2248 > 97 +2264 > 98 +2265 > 99 +2320 > 93 +2321 > 9B +2500 > 80 +2502 > 81 +250C > 82 +2510 > 83 +2514 > 84 +2518 > 85 +251C > 86 +2524 > 87 +252C > 88 +2534 > 89 +253C > 8A +2550 > A0 +2551 > A1 +2552 > A2 +2554 > A5 +2557 > A8 +2558 > A9 +2559 > AA +255A > AB +255B > AC +255D > AE +255E > AF +255F > B0 +2560 > B1 +2561 > B2 +2563 > B5 +2566 > B8 +2567 > B9 +2568 > BA +2569 > BB +256A > BC +256C > BE +2580 > 8B +2584 > 8C +2588 > 8D +258C > 8E +2590 > 8F +2591 > 90 +2592 > 91 +2593 > 92 +25A0 > 94 +. + +NFD +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 2500 +81 > 2502 +82 > 250C +83 > 2510 +84 > 2514 +85 > 2518 +86 > 251C +87 > 2524 +88 > 252C +89 > 2534 +8A > 253C +8B > 2580 +8C > 2584 +8D > 2588 +8E > 258C +8F > 2590 +90 > 2591 +91 > 2592 +92 > 2593 +93 > 2320 +94 > 25A0 +95 > 2022 +96 > 221A +97 > 2248 +98 > 2264 +99 > 2265 +9A > 00A0 +9B > 2321 +9C > 00B0 +9D > 00B2 +9E > 00B7 +9F > 00F7 +A0 > 2550 +A1 > 2551 +A2 > 2552 +A3 > 0435 0308 +A4 > 0454 +A5 > 2554 +A6 > 0456 +A7 > 0456 0308 +A8 > 2557 +A9 > 2558 +AA > 2559 +AB > 255A +AC > 255B +AD > 0491 +AE > 255D +AF > 255E +B0 > 255F +B1 > 2560 +B2 > 2561 +B3 > 0415 0308 +B4 > 0404 +B5 > 2563 +B6 > 0406 +B7 > 0406 0308 +B8 > 2566 +B9 > 2567 +BA > 2568 +BB > 2569 +BC > 256A +BD > 0490 +BE > 256C +BF > 00A9 +C0 > 044E +C1 > 0430 +C2 > 0431 +C3 > 0446 +C4 > 0434 +C5 > 0435 +C6 > 0444 +C7 > 0433 +C8 > 0445 +C9 > 0438 +CA > 0438 0306 +CB > 043A +CC > 043B +CD > 043C +CE > 043D +CF > 043E +D0 > 043F +D1 > 044F +D2 > 0440 +D3 > 0441 +D4 > 0442 +D5 > 0443 +D6 > 0436 +D7 > 0432 +D8 > 044C +D9 > 044B +DA > 0437 +DB > 0448 +DC > 044D +DD > 0449 +DE > 0447 +DF > 044A +E0 > 042E +E1 > 0410 +E2 > 0411 +E3 > 0426 +E4 > 0414 +E5 > 0415 +E6 > 0424 +E7 > 0413 +E8 > 0425 +E9 > 0418 +EA > 0418 0306 +EB > 041A +EC > 041B +ED > 041C +EE > 041D +EF > 041E +F0 > 041F +F1 > 042F +F2 > 0420 +F3 > 0421 +F4 > 0422 +F5 > 0423 +F6 > 0416 +F7 > 0412 +F8 > 042C +F9 > 042B +FA > 0417 +FB > 0428 +FC > 042D +FD > 0429 +FE > 0427 +FF > 042A +. + +NFC +/ +N 256 +00 > 0000 +01 > 0001 +02 > 0002 +03 > 0003 +04 > 0004 +05 > 0005 +06 > 0006 +07 > 0007 +08 > 0008 +09 > 0009 +0A > 000A +0B > 000B +0C > 000C +0D > 000D +0E > 000E +0F > 000F +10 > 0010 +11 > 0011 +12 > 0012 +13 > 0013 +14 > 0014 +15 > 0015 +16 > 0016 +17 > 0017 +18 > 0018 +19 > 0019 +1A > 001A +1B > 001B +1C > 001C +1D > 001D +1E > 001E +1F > 001F +20 > 0020 +21 > 0021 +22 > 0022 +23 > 0023 +24 > 0024 +25 > 0025 +26 > 0026 +27 > 0027 +28 > 0028 +29 > 0029 +2A > 002A +2B > 002B +2C > 002C +2D > 002D +2E > 002E +2F > 002F +30 > 0030 +31 > 0031 +32 > 0032 +33 > 0033 +34 > 0034 +35 > 0035 +36 > 0036 +37 > 0037 +38 > 0038 +39 > 0039 +3A > 003A +3B > 003B +3C > 003C +3D > 003D +3E > 003E +3F > 003F +40 > 0040 +41 > 0041 +42 > 0042 +43 > 0043 +44 > 0044 +45 > 0045 +46 > 0046 +47 > 0047 +48 > 0048 +49 > 0049 +4A > 004A +4B > 004B +4C > 004C +4D > 004D +4E > 004E +4F > 004F +50 > 0050 +51 > 0051 +52 > 0052 +53 > 0053 +54 > 0054 +55 > 0055 +56 > 0056 +57 > 0057 +58 > 0058 +59 > 0059 +5A > 005A +5B > 005B +5C > 005C +5D > 005D +5E > 005E +5F > 005F +60 > 0060 +61 > 0061 +62 > 0062 +63 > 0063 +64 > 0064 +65 > 0065 +66 > 0066 +67 > 0067 +68 > 0068 +69 > 0069 +6A > 006A +6B > 006B +6C > 006C +6D > 006D +6E > 006E +6F > 006F +70 > 0070 +71 > 0071 +72 > 0072 +73 > 0073 +74 > 0074 +75 > 0075 +76 > 0076 +77 > 0077 +78 > 0078 +79 > 0079 +7A > 007A +7B > 007B +7C > 007C +7D > 007D +7E > 007E +7F > 007F +80 > 2500 +81 > 2502 +82 > 250C +83 > 2510 +84 > 2514 +85 > 2518 +86 > 251C +87 > 2524 +88 > 252C +89 > 2534 +8A > 253C +8B > 2580 +8C > 2584 +8D > 2588 +8E > 258C +8F > 2590 +90 > 2591 +91 > 2592 +92 > 2593 +93 > 2320 +94 > 25A0 +95 > 2022 +96 > 221A +97 > 2248 +98 > 2264 +99 > 2265 +9A > 00A0 +9B > 2321 +9C > 00B0 +9D > 00B2 +9E > 00B7 +9F > 00F7 +A0 > 2550 +A1 > 2551 +A2 > 2552 +A3 > 0451 +A4 > 0454 +A5 > 2554 +A6 > 0456 +A7 > 0457 +A8 > 2557 +A9 > 2558 +AA > 2559 +AB > 255A +AC > 255B +AD > 0491 +AE > 255D +AF > 255E +B0 > 255F +B1 > 2560 +B2 > 2561 +B3 > 0401 +B4 > 0404 +B5 > 2563 +B6 > 0406 +B7 > 0407 +B8 > 2566 +B9 > 2567 +BA > 2568 +BB > 2569 +BC > 256A +BD > 0490 +BE > 256C +BF > 00A9 +C0 > 044E +C1 > 0430 +C2 > 0431 +C3 > 0446 +C4 > 0434 +C5 > 0435 +C6 > 0444 +C7 > 0433 +C8 > 0445 +C9 > 0438 +CA > 0439 +CB > 043A +CC > 043B +CD > 043C +CE > 043D +CF > 043E +D0 > 043F +D1 > 044F +D2 > 0440 +D3 > 0441 +D4 > 0442 +D5 > 0443 +D6 > 0436 +D7 > 0432 +D8 > 044C +D9 > 044B +DA > 0437 +DB > 0448 +DC > 044D +DD > 0449 +DE > 0447 +DF > 044A +E0 > 042E +E1 > 0410 +E2 > 0411 +E3 > 0426 +E4 > 0414 +E5 > 0415 +E6 > 0424 +E7 > 0413 +E8 > 0425 +E9 > 0418 +EA > 0419 +EB > 041A +EC > 041B +ED > 041C +EE > 041D +EF > 041E +F0 > 041F +F1 > 042F +F2 > 0420 +F3 > 0421 +F4 > 0422 +F5 > 0423 +F6 > 0416 +F7 > 0412 +F8 > 042C +F9 > 042B +FA > 0417 +FB > 0428 +FC > 042D +FD > 0429 +FE > 0427 +FF > 042A +. + +COMP += NFC +. diff --git a/assets/data/koi8-u.cset b/assets/data/koi8-u.cset new file mode 100644 index 0000000..3f8e2e9 --- /dev/null +++ b/assets/data/koi8-u.cset @@ -0,0 +1,262 @@ +# Aspell Character Data File. += koi8-u +> ascii +/ +# <char> <uni> <type> <display> <upper> <lower> <title> <plain> +# <sl-first> <sl-rest> +00 0000 - N 00 00 00 00 00 00 # <control> +01 0001 . N 01 01 01 00 00 00 # <unused control> +02 0002 . N 02 02 02 00 00 00 # <unused control> +03 0003 . N 03 03 03 00 00 00 # <unused control> +04 0004 . N 04 04 04 00 00 00 # <unused control> +05 0005 . N 05 05 05 00 00 00 # <unused control> +06 0006 . N 06 06 06 00 00 00 # <unused control> +07 0007 . N 07 07 07 00 00 00 # <unused control> +08 0008 . N 08 08 08 00 00 00 # <unused control> +09 0009 . N 09 09 09 00 00 00 # <unused control> +0A 000A . N 0A 0A 0A 00 00 00 # <unused control> +0B 000B . N 0B 0B 0B 00 00 00 # <unused control> +0C 000C . N 0C 0C 0C 00 00 00 # <unused control> +0D 000D . N 0D 0D 0D 00 00 00 # <unused control> +0E 000E . N 0E 0E 0E 00 00 00 # <unused control> +0F 000F . N 0F 0F 0F 00 00 00 # <unused control> +10 0010 - N 10 10 10 00 00 00 # <control> +11 0011 . N 11 11 11 00 00 00 # <unused control> +12 0012 . N 12 12 12 00 00 00 # <unused control> +13 0013 . N 13 13 13 00 00 00 # <unused control> +14 0014 . N 14 14 14 00 00 00 # <unused control> +15 0015 . N 15 15 15 00 00 00 # <unused control> +16 0016 . N 16 16 16 00 00 00 # <unused control> +17 0017 . N 17 17 17 00 00 00 # <unused control> +18 0018 . N 18 18 18 00 00 00 # <unused control> +19 0019 . N 19 19 19 00 00 00 # <unused control> +1A 001A . N 1A 1A 1A 00 00 00 # <unused control> +1B 001B . N 1B 1B 1B 00 00 00 # <unused control> +1C 001C . N 1C 1C 1C 00 00 00 # <unused control> +1D 001D . N 1D 1D 1D 00 00 00 # <unused control> +1E 001E . N 1E 1E 1E 00 00 00 # <unused control> +1F 001F . N 1F 1F 1F 00 00 00 # <unused control> +20 0020 W Y 20 20 20 00 00 00 # SPACE +21 0021 - Y 21 21 21 00 00 00 # EXCLAMATION MARK +22 0022 - Y 22 22 22 00 00 00 # QUOTATION MARK +23 0023 - Y 23 23 23 00 00 00 # NUMBER SIGN +24 0024 - Y 24 24 24 00 00 00 # DOLLAR SIGN +25 0025 - Y 25 25 25 00 00 00 # PERCENT SIGN +26 0026 - Y 26 26 26 00 00 00 # AMPERSAND +27 0027 - Y 27 27 27 00 00 00 # APOSTROPHE +28 0028 - Y 28 28 28 00 00 00 # LEFT PARENTHESIS +29 0029 - Y 29 29 29 00 00 00 # RIGHT PARENTHESIS +2A 002A - Y 2A 2A 2A 00 00 00 # ASTERISK +2B 002B - Y 2B 2B 2B 00 00 00 # PLUS SIGN +2C 002C - Y 2C 2C 2C 00 00 00 # COMMA +2D 002D H Y 2D 2D 2D 00 00 00 # HYPHEN-MINUS +2E 002E - Y 2E 2E 2E 00 00 00 # FULL STOP +2F 002F - Y 2F 2F 2F 00 00 00 # SOLIDUS +30 0030 D Y 30 30 30 00 00 00 # DIGIT ZERO +31 0031 D Y 31 31 31 00 00 00 # DIGIT ONE +32 0032 D Y 32 32 32 00 00 00 # DIGIT TWO +33 0033 D Y 33 33 33 00 00 00 # DIGIT THREE +34 0034 D Y 34 34 34 00 00 00 # DIGIT FOUR +35 0035 D Y 35 35 35 00 00 00 # DIGIT FIVE +36 0036 D Y 36 36 36 00 00 00 # DIGIT SIX +37 0037 D Y 37 37 37 00 00 00 # DIGIT SEVEN +38 0038 D Y 38 38 38 00 00 00 # DIGIT EIGHT +39 0039 D Y 39 39 39 00 00 00 # DIGIT NINE +3A 003A - Y 3A 3A 3A 00 00 00 # COLON +3B 003B - Y 3B 3B 3B 00 00 00 # SEMICOLON +3C 003C - Y 3C 3C 3C 00 00 00 # LESS-THAN SIGN +3D 003D - Y 3D 3D 3D 00 00 00 # EQUALS SIGN +3E 003E - Y 3E 3E 3E 00 00 00 # GREATER-THAN SIGN +3F 003F - Y 3F 3F 3F 00 00 00 # QUESTION MARK +40 0040 - Y 40 40 40 00 00 00 # COMMERCIAL AT +41 0041 L Y 41 61 41 41 2A 00 # LATIN CAPITAL LETTER A +42 0042 L Y 42 62 42 42 62 62 # LATIN CAPITAL LETTER B +43 0043 L Y 43 63 43 43 63 63 # LATIN CAPITAL LETTER C +44 0044 L Y 44 64 44 44 64 64 # LATIN CAPITAL LETTER D +45 0045 L Y 45 65 45 45 2A 00 # LATIN CAPITAL LETTER E +46 0046 L Y 46 66 46 46 66 66 # LATIN CAPITAL LETTER F +47 0047 L Y 47 67 47 47 67 67 # LATIN CAPITAL LETTER G +48 0048 L Y 48 68 48 48 68 68 # LATIN CAPITAL LETTER H +49 0049 L Y 49 69 49 49 2A 00 # LATIN CAPITAL LETTER I +4A 004A L Y 4A 6A 4A 4A 6A 6A # LATIN CAPITAL LETTER J +4B 004B L Y 4B 6B 4B 4B 6B 6B # LATIN CAPITAL LETTER K +4C 004C L Y 4C 6C 4C 4C 6C 6C # LATIN CAPITAL LETTER L +4D 004D L Y 4D 6D 4D 4D 6D 6D # LATIN CAPITAL LETTER M +4E 004E L Y 4E 6E 4E 4E 6E 6E # LATIN CAPITAL LETTER N +4F 004F L Y 4F 6F 4F 4F 2A 00 # LATIN CAPITAL LETTER O +50 0050 L Y 50 70 50 50 70 70 # LATIN CAPITAL LETTER P +51 0051 L Y 51 71 51 51 71 71 # LATIN CAPITAL LETTER Q +52 0052 L Y 52 72 52 52 72 72 # LATIN CAPITAL LETTER R +53 0053 L Y 53 73 53 53 73 73 # LATIN CAPITAL LETTER S +54 0054 L Y 54 74 54 54 74 74 # LATIN CAPITAL LETTER T +55 0055 L Y 55 75 55 55 2A 00 # LATIN CAPITAL LETTER U +56 0056 L Y 56 76 56 56 76 76 # LATIN CAPITAL LETTER V +57 0057 L Y 57 77 57 57 77 77 # LATIN CAPITAL LETTER W +58 0058 L Y 58 78 58 58 78 78 # LATIN CAPITAL LETTER X +59 0059 L Y 59 79 59 59 79 79 # LATIN CAPITAL LETTER Y +5A 005A L Y 5A 7A 5A 5A 7A 7A # LATIN CAPITAL LETTER Z +5B 005B - Y 5B 5B 5B 00 00 00 # LEFT SQUARE BRACKET +5C 005C - Y 5C 5C 5C 00 00 00 # REVERSE SOLIDUS +5D 005D - Y 5D 5D 5D 00 00 00 # RIGHT SQUARE BRACKET +5E 005E - Y 5E 5E 5E 00 00 00 # CIRCUMFLEX ACCENT +5F 005F - Y 5F 5F 5F 00 00 00 # LOW LINE +60 0060 - Y 60 60 60 00 00 00 # GRAVE ACCENT +61 0061 L Y 41 61 41 61 2A 00 # LATIN SMALL LETTER A +62 0062 L Y 42 62 42 62 62 62 # LATIN SMALL LETTER B +63 0063 L Y 43 63 43 63 63 63 # LATIN SMALL LETTER C +64 0064 L Y 44 64 44 64 64 64 # LATIN SMALL LETTER D +65 0065 L Y 45 65 45 65 2A 00 # LATIN SMALL LETTER E +66 0066 L Y 46 66 46 66 66 66 # LATIN SMALL LETTER F +67 0067 L Y 47 67 47 67 67 67 # LATIN SMALL LETTER G +68 0068 L Y 48 68 48 68 68 68 # LATIN SMALL LETTER H +69 0069 L Y 49 69 49 69 2A 00 # LATIN SMALL LETTER I +6A 006A L Y 4A 6A 4A 6A 6A 6A # LATIN SMALL LETTER J +6B 006B L Y 4B 6B 4B 6B 6B 6B # LATIN SMALL LETTER K +6C 006C L Y 4C 6C 4C 6C 6C 6C # LATIN SMALL LETTER L +6D 006D L Y 4D 6D 4D 6D 6D 6D # LATIN SMALL LETTER M +6E 006E L Y 4E 6E 4E 6E 6E 6E # LATIN SMALL LETTER N +6F 006F L Y 4F 6F 4F 6F 2A 00 # LATIN SMALL LETTER O +70 0070 L Y 50 70 50 70 70 70 # LATIN SMALL LETTER P +71 0071 L Y 51 71 51 71 71 71 # LATIN SMALL LETTER Q +72 0072 L Y 52 72 52 72 72 72 # LATIN SMALL LETTER R +73 0073 L Y 53 73 53 73 73 73 # LATIN SMALL LETTER S +74 0074 L Y 54 74 54 74 74 74 # LATIN SMALL LETTER T +75 0075 L Y 55 75 55 75 2A 00 # LATIN SMALL LETTER U +76 0076 L Y 56 76 56 76 76 76 # LATIN SMALL LETTER V +77 0077 L Y 57 77 57 77 77 77 # LATIN SMALL LETTER W +78 0078 L Y 58 78 58 78 78 78 # LATIN SMALL LETTER X +79 0079 L Y 59 79 59 79 79 79 # LATIN SMALL LETTER Y +7A 007A L Y 5A 7A 5A 7A 7A 7A # LATIN SMALL LETTER Z +7B 007B - Y 7B 7B 7B 00 00 00 # LEFT CURLY BRACKET +7C 007C - Y 7C 7C 7C 00 00 00 # VERTICAL LINE +7D 007D - Y 7D 7D 7D 00 00 00 # RIGHT CURLY BRACKET +7E 007E - Y 7E 7E 7E 00 00 00 # TILDE +7F 007F - N 7F 7F 7F 00 00 00 # <control> +80 2500 . N 80 80 80 00 00 00 # <unused special> +81 2502 . N 81 81 81 00 00 00 # <unused special> +82 250C . N 82 82 82 00 00 00 # <unused special> +83 2510 . N 83 83 83 00 00 00 # <unused special> +84 2514 . N 84 84 84 00 00 00 # <unused special> +85 2518 . N 85 85 85 00 00 00 # <unused special> +86 251C . N 86 86 86 00 00 00 # <unused special> +87 2524 . N 87 87 87 00 00 00 # <unused special> +88 252C . N 88 88 88 00 00 00 # <unused special> +89 2534 . N 89 89 89 00 00 00 # <unused special> +8A 253C . N 8A 8A 8A 00 00 00 # <unused special> +8B 2580 . N 8B 8B 8B 00 00 00 # <unused special> +8C 2584 . N 8C 8C 8C 00 00 00 # <unused special> +8D 2588 . N 8D 8D 8D 00 00 00 # <unused special> +8E 258C . N 8E 8E 8E 00 00 00 # <unused special> +8F 2590 . N 8F 8F 8F 00 00 00 # <unused special> +90 2591 . N 90 90 90 00 00 00 # <unused special> +91 2592 . N 91 91 91 00 00 00 # <unused special> +92 2593 . N 92 92 92 00 00 00 # <unused special> +93 2320 . N 93 93 93 00 00 00 # <unused special> +94 25A0 . N 94 94 94 00 00 00 # <unused special> +95 2022 - Y 95 95 95 00 00 00 # BULLET +96 221A . N 96 96 96 00 00 00 # <unused special> +97 2248 . N 97 97 97 00 00 00 # <unused special> +98 2264 . N 98 98 98 00 00 00 # <unused special> +99 2265 . N 99 99 99 00 00 00 # <unused special> +9A 00A0 W Y 9A 9A 9A 00 00 00 # NO-BREAK SPACE +9B 2321 . N 9B 9B 9B 00 00 00 # <unused special> +9C 00B0 - Y 9C 9C 9C 00 00 00 # DEGREE SIGN +9D 00B2 - Y 9D 9D 9D 00 00 00 # SUPERSCRIPT TWO +9E 00B7 - Y 9E 9E 9E 00 00 00 # MIDDLE DOT +9F 00F7 - Y 9F 9F 9F 00 00 00 # DIVISION SIGN +A0 2550 . N A0 A0 A0 00 00 00 # <unused special> +A1 2551 . N A1 A1 A1 00 00 00 # <unused special> +A2 2552 . N A2 A2 A2 00 00 00 # <unused special> +A3 0451 L Y B3 A3 B3 A3 A3 A3 # CYRILLIC SMALL LETTER IO +A4 0454 L Y B4 A4 B4 A4 A4 A4 # CYRILLIC SMALL LETTER UKRAINIAN IE +A5 2554 . N A5 A5 A5 00 00 00 # <unused special> +A6 0456 L Y B6 A6 B6 A6 A6 A6 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +A7 0457 L Y B7 A7 B7 A7 A7 A7 # CYRILLIC SMALL LETTER YI +A8 2557 . N A8 A8 A8 00 00 00 # <unused special> +A9 2558 . N A9 A9 A9 00 00 00 # <unused special> +AA 2559 . N AA AA AA 00 00 00 # <unused special> +AB 255A . N AB AB AB 00 00 00 # <unused special> +AC 255B . N AC AC AC 00 00 00 # <unused special> +AD 0491 L Y BD AD BD AD AD AD # CYRILLIC SMALL LETTER GHE WITH UPTURN +AE 255D . N AE AE AE 00 00 00 # <unused special> +AF 255E . N AF AF AF 00 00 00 # <unused special> +B0 255F . N B0 B0 B0 00 00 00 # <unused special> +B1 2560 . N B1 B1 B1 00 00 00 # <unused special> +B2 2561 . N B2 B2 B2 00 00 00 # <unused special> +B3 0401 L Y B3 A3 B3 B3 A3 A3 # CYRILLIC CAPITAL LETTER IO +B4 0404 L Y B4 A4 B4 B4 A4 A4 # CYRILLIC CAPITAL LETTER UKRAINIAN IE +B5 2563 . N B5 B5 B5 00 00 00 # <unused special> +B6 0406 L Y B6 A6 B6 B6 A6 A6 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +B7 0407 L Y B7 A7 B7 B7 A7 A7 # CYRILLIC CAPITAL LETTER YI +B8 2566 . N B8 B8 B8 00 00 00 # <unused special> +B9 2567 . N B9 B9 B9 00 00 00 # <unused special> +BA 2568 . N BA BA BA 00 00 00 # <unused special> +BB 2569 . N BB BB BB 00 00 00 # <unused special> +BC 256A . N BC BC BC 00 00 00 # <unused special> +BD 0490 L Y BD AD BD BD AD AD # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +BE 256C . N BE BE BE 00 00 00 # <unused special> +BF 00A9 - Y BF BF BF 00 00 00 # COPYRIGHT SIGN +C0 044E L Y E0 C0 E0 C0 2A 00 # CYRILLIC SMALL LETTER YU +C1 0430 L Y E1 C1 E1 C1 2A 00 # CYRILLIC SMALL LETTER A +C2 0431 L Y E2 C2 E2 C2 C2 C2 # CYRILLIC SMALL LETTER BE +C3 0446 L Y E3 C3 E3 C3 C3 C3 # CYRILLIC SMALL LETTER TSE +C4 0434 L Y E4 C4 E4 C4 C4 C4 # CYRILLIC SMALL LETTER DE +C5 0435 L Y E5 C5 E5 C5 2A 00 # CYRILLIC SMALL LETTER IE +C6 0444 L Y E6 C6 E6 C6 C6 C6 # CYRILLIC SMALL LETTER EF +C7 0433 L Y E7 C7 E7 C7 C7 C7 # CYRILLIC SMALL LETTER GHE +C8 0445 L Y E8 C8 E8 C8 C8 C8 # CYRILLIC SMALL LETTER HA +C9 0438 L Y E9 C9 E9 C9 2A 00 # CYRILLIC SMALL LETTER I +CA 0439 L Y EA CA EA CA CA CA # CYRILLIC SMALL LETTER SHORT I +CB 043A L Y EB CB EB CB CB CB # CYRILLIC SMALL LETTER KA +CC 043B L Y EC CC EC CC CC CC # CYRILLIC SMALL LETTER EL +CD 043C L Y ED CD ED CD CD CD # CYRILLIC SMALL LETTER EM +CE 043D L Y EE CE EE CE CE CE # CYRILLIC SMALL LETTER EN +CF 043E L Y EF CF EF CF 2A 00 # CYRILLIC SMALL LETTER O +D0 043F L Y F0 D0 F0 D0 D0 D0 # CYRILLIC SMALL LETTER PE +D1 044F L Y F1 D1 F1 D1 2A 00 # CYRILLIC SMALL LETTER YA +D2 0440 L Y F2 D2 F2 D2 D2 D2 # CYRILLIC SMALL LETTER ER +D3 0441 L Y F3 D3 F3 D3 D3 D3 # CYRILLIC SMALL LETTER ES +D4 0442 L Y F4 D4 F4 D4 D4 D4 # CYRILLIC SMALL LETTER TE +D5 0443 L Y F5 D5 F5 D5 2A 00 # CYRILLIC SMALL LETTER U +D6 0436 L Y F6 D6 F6 D6 D6 D6 # CYRILLIC SMALL LETTER ZHE +D7 0432 L Y F7 D7 F7 D7 D7 D7 # CYRILLIC SMALL LETTER VE +D8 044C L Y F8 D8 F8 D8 D8 D8 # CYRILLIC SMALL LETTER SOFT SIGN +D9 044B L Y F9 D9 F9 D9 2A 00 # CYRILLIC SMALL LETTER YERU +DA 0437 L Y FA DA FA DA DA DA # CYRILLIC SMALL LETTER ZE +DB 0448 L Y FB DB FB DB DB DB # CYRILLIC SMALL LETTER SHA +DC 044D L Y FC DC FC DC 2A 00 # CYRILLIC SMALL LETTER E +DD 0449 L Y FD DD FD DD DD DD # CYRILLIC SMALL LETTER SHCHA +DE 0447 L Y FE DE FE DE DE DE # CYRILLIC SMALL LETTER CHE +DF 044A L Y FF DF FF DF DF DF # CYRILLIC SMALL LETTER HARD SIGN +E0 042E L Y E0 C0 E0 E0 2A 00 # CYRILLIC CAPITAL LETTER YU +E1 0410 L Y E1 C1 E1 E1 2A 00 # CYRILLIC CAPITAL LETTER A +E2 0411 L Y E2 C2 E2 E2 C2 C2 # CYRILLIC CAPITAL LETTER BE +E3 0426 L Y E3 C3 E3 E3 C3 C3 # CYRILLIC CAPITAL LETTER TSE +E4 0414 L Y E4 C4 E4 E4 C4 C4 # CYRILLIC CAPITAL LETTER DE +E5 0415 L Y E5 C5 E5 E5 2A 00 # CYRILLIC CAPITAL LETTER IE +E6 0424 L Y E6 C6 E6 E6 C6 C6 # CYRILLIC CAPITAL LETTER EF +E7 0413 L Y E7 C7 E7 E7 C7 C7 # CYRILLIC CAPITAL LETTER GHE +E8 0425 L Y E8 C8 E8 E8 C8 C8 # CYRILLIC CAPITAL LETTER HA +E9 0418 L Y E9 C9 E9 E9 2A 00 # CYRILLIC CAPITAL LETTER I +EA 0419 L Y EA CA EA EA CA CA # CYRILLIC CAPITAL LETTER SHORT I +EB 041A L Y EB CB EB EB CB CB # CYRILLIC CAPITAL LETTER KA +EC 041B L Y EC CC EC EC CC CC # CYRILLIC CAPITAL LETTER EL +ED 041C L Y ED CD ED ED CD CD # CYRILLIC CAPITAL LETTER EM +EE 041D L Y EE CE EE EE CE CE # CYRILLIC CAPITAL LETTER EN +EF 041E L Y EF CF EF EF 2A 00 # CYRILLIC CAPITAL LETTER O +F0 041F L Y F0 D0 F0 F0 D0 D0 # CYRILLIC CAPITAL LETTER PE +F1 042F L Y F1 D1 F1 F1 2A 00 # CYRILLIC CAPITAL LETTER YA +F2 0420 L Y F2 D2 F2 F2 D2 D2 # CYRILLIC CAPITAL LETTER ER +F3 0421 L Y F3 D3 F3 F3 D3 D3 # CYRILLIC CAPITAL LETTER ES +F4 0422 L Y F4 D4 F4 F4 D4 D4 # CYRILLIC CAPITAL LETTER TE +F5 0423 L Y F5 D5 F5 F5 2A 00 # CYRILLIC CAPITAL LETTER U +F6 0416 L Y F6 D6 F6 F6 D6 D6 # CYRILLIC CAPITAL LETTER ZHE +F7 0412 L Y F7 D7 F7 F7 D7 D7 # CYRILLIC CAPITAL LETTER VE +F8 042C L Y F8 D8 F8 F8 D8 D8 # CYRILLIC CAPITAL LETTER SOFT SIGN +F9 042B L Y F9 D9 F9 F9 2A 00 # CYRILLIC CAPITAL LETTER YERU +FA 0417 L Y FA DA FA FA DA DA # CYRILLIC CAPITAL LETTER ZE +FB 0428 L Y FB DB FB FB DB DB # CYRILLIC CAPITAL LETTER SHA +FC 042D L Y FC DC FC FC 2A 00 # CYRILLIC CAPITAL LETTER E +FD 0429 L Y FD DD FD FD DD DD # CYRILLIC CAPITAL LETTER SHCHA +FE 0427 L Y FE DE FE FE DE DE # CYRILLIC CAPITAL LETTER CHE +FF 042A L Y FF DF FF FF DF DF # CYRILLIC CAPITAL LETTER HARD SIGN diff --git a/assets/data/split.kbd b/assets/data/split.kbd new file mode 100644 index 0000000..3628872 --- /dev/null +++ b/assets/data/split.kbd @@ -0,0 +1,23 @@ +# Natural (split) keyboard data file + +qw +we +er +rt +yu +ui +io +op +as +sd +df +fg +hj +jk +kl +zx +xc +cv +bn +nm + diff --git a/assets/data/standard.kbd b/assets/data/standard.kbd new file mode 100644 index 0000000..fd57868 --- /dev/null +++ b/assets/data/standard.kbd @@ -0,0 +1,25 @@ +# Standard keyboard data file + +qw +we +er +rt +ty +yu +ui +io +op +as +sd +df +fg +gh +hj +jk +kl +zx +xc +cv +vb +bn +nm diff --git a/assets/data/sv.dat b/assets/data/sv.dat new file mode 100644 index 0000000..ade17c6 --- /dev/null +++ b/assets/data/sv.dat @@ -0,0 +1,6 @@ +# Generated with Aspell Dicts "proc" script version 0.50.3 +name sv +charset iso8859-1 +special ' -** - -** . -** : -*- +soundslike sv +run-together true diff --git a/assets/data/sv.multi b/assets/data/sv.multi new file mode 100644 index 0000000..cd6e0b5 --- /dev/null +++ b/assets/data/sv.multi @@ -0,0 +1,2 @@ +# Generated with Aspell Dicts "proc" script version 0.50.3 +add sv.rws diff --git a/assets/data/sv.rws b/assets/data/sv.rws new file mode 100644 index 0000000..73cc9a1 Binary files /dev/null and b/assets/data/sv.rws differ diff --git a/assets/data/sv_phonet.dat b/assets/data/sv_phonet.dat new file mode 100644 index 0000000..46f58dd --- /dev/null +++ b/assets/data/sv_phonet.dat @@ -0,0 +1,171 @@ +# vim:ts=20: +# swedish_phonet.dat - Swedish phonetic transformation rules for aspell +# Copyright (C) 2000 Martin Norbck <d95mback@dtek.chalmers.se> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +# USA. +# +# $Id$ +# +# ChangeLog: +# 2001-01-25: 0.2 total rewrite +# 2000-02-24: 0.1 initial version +# +# See end of file for description (in Swedish) + +version 0.2 + +& & +@ @ +ANG(EIY)-^ ANI # frledet an- ska inte bli @-ljud +AGNO6 AKNO # agnostiker osv. +AG(IE)-6 AK # vokal+g(ie) ger ej j-ljud +A A +BB-< _ +B P +CCO- K # broccoli, piccolo +CC KS # successiv, access, succ +CH & # choklad osv. +CK K # ck -> k som vanligt +C(EIY)-< S # c + mjuk vokal -> s +C K # c + annat -> k +DJ(U)- I # djungel, djvel, adj +DD- _ +D T +EG(IE)-6 EK # vokal+g(ie) ger ej j-ljud +E E + E +FF F +F F +G(EIY)-3 I # g+mjuk vokal ger j-ljud +GG6 K +GN @N # ugn, lugn... +G K +H(AOUEIY)-^ H # h i brjan av ord hrs +H(AUOEIY)- _ # annars stumt framfr vokal +HJ I # hj->j (hjrta osv.) +H H +IG(IE)-6 IK # vokal+g(ie) ger ej j-ljud +I I +J I +K(EIY)-^ & # k+mjuk vokal ger sje-ljud +KJ & # kjol +K K +LJU- I # ljuga, ljus +LL- _ +L L +MM- _ +M M +NG6 @ +NN- _ +N N +ORIGI8 ORKI # specialfall +OG(IE)-6 OK # vokal+g(ie) ger ej j-ljud +O O +PROJEKT PRO&EKT # specialfall +PSALT< SALT # specialfall +PSALM< SALM # specialfall +PP- _ +P P +Q K +RGI$6 RGI # inget j i slutet +RGA$6 RIA # hr r det dremot j (arga,frga) +RGE$6 RIE # hr ocks (Norge, verge) +RGS$ RIS # rgs i slutet +RG$ RI # rg i slutet +RD T # "bltt" d +RN N # "bltt" n +RT T # "bltt" t +RLD T # vrld +RL L # "bltt" l +RS & # sje-ljud (fars, grsgrd) +RR- _ +R R +SS- _ +SCHIZ6 SKITS # specialfall +SCH6 & +SKJ & # skjorta, skjuta +SJ & # sje-ljud +S S +TION9^ TION # tionde +TION6 &ON # station osv. +TT- _ +T T +UG(IE)-6 UK # vokal+g(ie) ger ej j-ljud +U U +V F +W F +X9 KS +YG(IE)-6 YK # vokal+g(ie) ger ej j-ljud +Y I +ZZ TS +Z S +TTIO9 OTIO # specialfall (ej sje-ljud) +RTION9 ORTION # specialfall (r hrs) +G(IE)-6 OK # vokal+g(ie) ger ej j-ljud + O +G(IE)-6 EK # vokal+g(ie) ger ej j-ljud + E +G(IE)-6 K # vokal+g(ie) ger ej j-ljud + + +# Detta r en lista med transformationer fr att bttre kunna fresl +# ersttningsord till felstavade svenska ord. +# +# Nr man stavar fel p grund av att man inte vet stavningen (till +# skillnad frn slarvfel), s skriver man ofta ngot som skulle uttalas +# p samma stt. +# +# Fr att kunna fresl bttre s gr aspell om ordet till en +# (ungefrlig) fonetisk beskrivning med hjlp av dessa regler. +# +# Det fungerar s hr: +# +# Ord som finns i ordlistan transformeras till sin fonetiska form +# Nr ett ord som inte finns med i ordlistan ptrffas transformeras det +# till sin fonetiska form och jmfrs med de ord som finns i ordlistan. +# Det r drfr viktigt att ord som finns i ordlistan transformeras +# rtt, annars kommer de aldrig att fresls rtt. +# +# Fljande fonem finns: +# A kort och lngt a-ljud +# E kort och lngt e- och -ljud +# F f- och v-ljud +# H tonande h (tonlst h noteras inte) +# I kort och lngt i- och y-ljud, j-ljud +# K g- och k-ljud +# L l-ljud (ven "bltt" som farlig och krl) +# M m-ljud +# N n-ljud (ven "bltt" som barn och torn) +# O kort och lngt o- och -ljud +# P b- och p-ljud +# R r-ljud +# S s-ljud +# T d- och t-ljud (ven "bltt", som hrd och hrt) +# U u-ljud +# V v-ljud +# @ ng-ljud +# & sje-ljud +# +# S hr funkar transformeringsreglerna i korthet: +# * Det som str till vnster transformeras till det till hger +# * Str det ett eller flera - betyder det att de sista bokstverna inte +# verstts, utan anvnds nsta gng +# * Str det en siffra betyder det att den transformeringen har en viss +# prioritet (normal prioritet r 5), ju hgre desto starkare +# * Inom varje initialbokstavsgrupp tilldelas prioritet uppifrn och ner +# +# Fr mer information om processen och om aspell, se aspell.sourceforge.org +# Kapitel 5.3 i bruksanvisningen handlar om detta diff --git a/assets/data/svenska.alias b/assets/data/svenska.alias new file mode 100644 index 0000000..9ffc26d --- /dev/null +++ b/assets/data/svenska.alias @@ -0,0 +1,2 @@ +# Generated with Aspell Dicts "proc" script version 0.50.3 +add sv.multi diff --git a/assets/data/swedish.alias b/assets/data/swedish.alias new file mode 100644 index 0000000..9ffc26d --- /dev/null +++ b/assets/data/swedish.alias @@ -0,0 +1,2 @@ +# Generated with Aspell Dicts "proc" script version 0.50.3 +add sv.multi diff --git a/gen/gr/padeler/aspellchecker/BuildConfig.java b/gen/gr/padeler/aspellchecker/BuildConfig.java new file mode 100644 index 0000000..49c448f --- /dev/null +++ b/gen/gr/padeler/aspellchecker/BuildConfig.java @@ -0,0 +1,6 @@ +/** Automatically generated file. DO NOT MODIFY */ +package gr.padeler.aspellchecker; + +public final class BuildConfig { + public final static boolean DEBUG = true; +} \ No newline at end of file diff --git a/gen/gr/padeler/aspellchecker/R.java b/gen/gr/padeler/aspellchecker/R.java new file mode 100644 index 0000000..993140a --- /dev/null +++ b/gen/gr/padeler/aspellchecker/R.java @@ -0,0 +1,31 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package gr.padeler.aspellchecker; + +public final class R { + public static final class array { + public static final int dicts=0x7f040002; + public static final int dictsVals=0x7f040003; + public static final int updateInterval=0x7f040000; + public static final int updateIntervalValues=0x7f040001; + } + public static final class attr { + } + public static final class drawable { + public static final int ic_launcher=0x7f020000; + } + public static final class string { + public static final int name=0x7f050000; + public static final int settings=0x7f050001; + public static final int subtype=0x7f050002; + } + public static final class xml { + public static final int prefs=0x7f030000; + public static final int spellchecker=0x7f030001; + } +} diff --git a/jni/Android.mk b/jni/Android.mk new file mode 100644 index 0000000..fe64a4f --- /dev/null +++ b/jni/Android.mk @@ -0,0 +1,67 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) +LOCAL_LDLIBS := -llog +#LOCAL_CFLAGS := -std=gnu99 +LOCAL_MODULE := aspell +LOCAL_C_INCLUDES := $(NDK_APP_PROJECT_PATH)/jni/common +LOCAL_SRC_FILES := native.cpp\ + common/cache.cpp\ + common/string.cpp\ + common/getdata.cpp\ + common/itemize.cpp\ + common/file_util.cpp\ + common/string_map.cpp\ + common/string_list.cpp\ + common/config.cpp\ + common/posib_err.cpp\ + common/errors.cpp\ + common/error.cpp\ + common/fstream.cpp\ + common/iostream.cpp\ + common/info.cpp\ + common/can_have_error.cpp\ + common/convert.cpp\ + common/tokenizer.cpp\ + common/speller.cpp\ + common/document_checker.cpp\ + common/filter.cpp\ + common/objstack.cpp \ + common/strtonum.cpp\ + common/gettext_init.cpp\ + common/file_data_util.cpp\ + modules/speller/default/readonly_ws.cpp\ + modules/speller/default/suggest.cpp\ + modules/speller/default/data.cpp\ + modules/speller/default/multi_ws.cpp\ + modules/speller/default/phonetic.cpp\ + modules/speller/default/writable.cpp\ + modules/speller/default/speller_impl.cpp\ + modules/speller/default/phonet.cpp\ + modules/speller/default/typo_editdist.cpp\ + modules/speller/default/editdist.cpp\ + modules/speller/default/primes.cpp\ + modules/speller/default/language.cpp\ + modules/speller/default/leditdist.cpp\ + modules/speller/default/affix.cpp\ + modules/tokenizer/basic.cpp\ + lib/filter-c.cpp\ + lib/word_list-c.cpp\ + lib/info-c.cpp\ + lib/mutable_container-c.cpp\ + lib/error-c.cpp\ + lib/document_checker-c.cpp\ + lib/string_map-c.cpp\ + lib/new_config.cpp\ + lib/config-c.cpp\ + lib/string_enumeration-c.cpp\ + lib/can_have_error-c.cpp\ + lib/dummy.cpp\ + lib/new_filter.cpp\ + lib/new_fmode.cpp\ + lib/string_list-c.cpp\ + lib/find_speller.cpp\ + lib/speller-c.cpp\ + lib/string_pair_enumeration-c.cpp\ + lib/new_checker.cpp + +include $(BUILD_SHARED_LIBRARY) diff --git a/jni/Application.mk b/jni/Application.mk new file mode 100644 index 0000000..1f970c2 --- /dev/null +++ b/jni/Application.mk @@ -0,0 +1,3 @@ +APP_STL := gnustl_static +APP_CPPFLAGS += -frtti -Wno-psabi +APP_OPTIM := debug diff --git a/jni/aspell.cpp b/jni/aspell.cpp new file mode 100644 index 0000000..775edf1 --- /dev/null +++ b/jni/aspell.cpp @@ -0,0 +1 @@ +#include <jni.h> diff --git a/jni/aspell.h b/jni/aspell.h new file mode 100644 index 0000000..9c8e81b --- /dev/null +++ b/jni/aspell.h @@ -0,0 +1,734 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_ASPELL__H +#define ASPELL_ASPELL__H + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************* type id *******************************/ + + +union AspellTypeId { + + unsigned int num; + + char str[4]; + +}; + + +typedef union AspellTypeId AspellTypeId; + + +/************************** mutable container **************************/ + + +typedef struct AspellMutableContainer AspellMutableContainer; + + +int aspell_mutable_container_add(struct AspellMutableContainer * ths, const char * to_add); + +int aspell_mutable_container_remove(struct AspellMutableContainer * ths, const char * to_rem); + +void aspell_mutable_container_clear(struct AspellMutableContainer * ths); + +struct AspellMutableContainer * aspell_mutable_container_to_mutable_container(struct AspellMutableContainer * ths); + + + +/******************************* key info *******************************/ + + + +enum AspellKeyInfoType {AspellKeyInfoString, AspellKeyInfoInt, AspellKeyInfoBool, AspellKeyInfoList}; +typedef enum AspellKeyInfoType AspellKeyInfoType; + + +struct AspellKeyInfo { + + /* The name of the key. */ + const char * name; + + /* The key type. */ + enum AspellKeyInfoType type; + + /* The default value of the key. */ + const char * def; + + /* A brief description of the key or NULL if internal value. */ + const char * desc; + + int flags; + + int other_data; + +}; + + +typedef struct AspellKeyInfo AspellKeyInfo; + + +/******************************** config ********************************/ + + +typedef struct AspellKeyInfoEnumeration AspellKeyInfoEnumeration; + + +int aspell_key_info_enumeration_at_end(const struct AspellKeyInfoEnumeration * ths); + +const struct AspellKeyInfo * aspell_key_info_enumeration_next(struct AspellKeyInfoEnumeration * ths); + +void delete_aspell_key_info_enumeration(struct AspellKeyInfoEnumeration * ths); + +struct AspellKeyInfoEnumeration * aspell_key_info_enumeration_clone(const struct AspellKeyInfoEnumeration * ths); + +void aspell_key_info_enumeration_assign(struct AspellKeyInfoEnumeration * ths, const struct AspellKeyInfoEnumeration * other); + + + +typedef struct AspellConfig AspellConfig; + + +struct AspellConfig * new_aspell_config(); + +void delete_aspell_config(struct AspellConfig * ths); + +struct AspellConfig * aspell_config_clone(const struct AspellConfig * ths); + +void aspell_config_assign(struct AspellConfig * ths, const struct AspellConfig * other); + +unsigned int aspell_config_error_number(const struct AspellConfig * ths); + +const char * aspell_config_error_message(const struct AspellConfig * ths); + +const struct AspellError * aspell_config_error(const struct AspellConfig * ths); + +/* Sets extra keys which this config class should + * accept. begin and end are expected to point to + * the beginning and ending of an array of Aspell + * Key Info. */ +void aspell_config_set_extra(struct AspellConfig * ths, const struct AspellKeyInfo * begin, const struct AspellKeyInfo * end); + +/* Returns the KeyInfo object for the + * corresponding key or returns NULL and sets + * error_num to PERROR_UNKNOWN_KEY if the key is + * not valid. The pointer returned is valid for + * the lifetime of the object. */ +const struct AspellKeyInfo * aspell_config_keyinfo(struct AspellConfig * ths, const char * key); + +/* Returns a newly allocated enumeration of all + * the possible objects this config class uses. */ +struct AspellKeyInfoEnumeration * aspell_config_possible_elements(struct AspellConfig * ths, int include_extra); + +/* Returns the default value for given key which + * may involve substituting variables, thus it is + * not the same as keyinfo(key)->def returns NULL + * and sets error_num to PERROR_UNKNOWN_KEY if + * the key is not valid. Uses the temporary + * string. */ +const char * aspell_config_get_default(struct AspellConfig * ths, const char * key); + +/* Returns a newly allocated enumeration of all + * the key/value pairs. This DOES not include ones + * which are set to their default values. */ +struct AspellStringPairEnumeration * aspell_config_elements(struct AspellConfig * ths); + +/* Inserts an item, if the item already exists it + * will be replaced. Returns TRUE if it succeeded + * or FALSE on error. If the key is not valid it + * sets error_num to PERROR_UNKNOWN_KEY, if the + * value is not valid it will set error_num to + * PERROR_BAD_VALUE, if the value can not be + * changed it sets error_num to + * PERROR_CANT_CHANGE_VALUE, and if the value is + * a list and you are trying to set its directory, + * it sets error_num to PERROR_LIST_SET */ +int aspell_config_replace(struct AspellConfig * ths, const char * key, const char * value); + +/* Remove a key and returns TRUE if it exists + * otherwise return FALSE. This effectively sets + * the key to its default value. Calling replace + * with a value of "<default>" will also call + * remove. If the key does not exist then it sets + * error_num to 0 or PERROR_NOT, if the key is + * not valid then it sets error_num to + * PERROR_UNKNOWN_KEY, if the value can not be + * changed then it sets error_num to + * PERROR_CANT_CHANGE_VALUE */ +int aspell_config_remove(struct AspellConfig * ths, const char * key); + +int aspell_config_have(const struct AspellConfig * ths, const char * key); + +/* Returns NULL on error. */ +const char * aspell_config_retrieve(struct AspellConfig * ths, const char * key); + +int aspell_config_retrieve_list(struct AspellConfig * ths, const char * key, struct AspellMutableContainer * lst); + +/* In "ths" Aspell configuration, search for a + * character string matching "key" string. + * If "key" is found then return 1 else return 0. + * If error encountered, then return -1. */ +int aspell_config_retrieve_bool(struct AspellConfig * ths, const char * key); + +/* In "ths" Aspell configuration, search for an + * integer value matching "key" string. + * Return -1 on error. */ +int aspell_config_retrieve_int(struct AspellConfig * ths, const char * key); + + + +/******************************** error ********************************/ + + +struct AspellError { + + const char * mesg; + + const struct AspellErrorInfo * err; + +}; + + +typedef struct AspellError AspellError; + +int aspell_error_is_a(const struct AspellError * ths, const struct AspellErrorInfo * e); + + +struct AspellErrorInfo { + + const struct AspellErrorInfo * isa; + + const char * mesg; + + unsigned int num_parms; + + const char * parms[3]; + +}; + + +typedef struct AspellErrorInfo AspellErrorInfo; + + +/**************************** can have error ****************************/ + + +typedef struct AspellCanHaveError AspellCanHaveError; + + +unsigned int aspell_error_number(const struct AspellCanHaveError * ths); + +const char * aspell_error_message(const struct AspellCanHaveError * ths); + +const struct AspellError * aspell_error(const struct AspellCanHaveError * ths); + +void delete_aspell_can_have_error(struct AspellCanHaveError * ths); + + + +/******************************** errors ********************************/ + + +extern const struct AspellErrorInfo * const aerror_other; +extern const struct AspellErrorInfo * const aerror_operation_not_supported; +extern const struct AspellErrorInfo * const aerror_cant_copy; +extern const struct AspellErrorInfo * const aerror_unimplemented_method; +extern const struct AspellErrorInfo * const aerror_file; +extern const struct AspellErrorInfo * const aerror_cant_open_file; +extern const struct AspellErrorInfo * const aerror_cant_read_file; +extern const struct AspellErrorInfo * const aerror_cant_write_file; +extern const struct AspellErrorInfo * const aerror_invalid_name; +extern const struct AspellErrorInfo * const aerror_bad_file_format; +extern const struct AspellErrorInfo * const aerror_dir; +extern const struct AspellErrorInfo * const aerror_cant_read_dir; +extern const struct AspellErrorInfo * const aerror_config; +extern const struct AspellErrorInfo * const aerror_unknown_key; +extern const struct AspellErrorInfo * const aerror_cant_change_value; +extern const struct AspellErrorInfo * const aerror_bad_key; +extern const struct AspellErrorInfo * const aerror_bad_value; +extern const struct AspellErrorInfo * const aerror_duplicate; +extern const struct AspellErrorInfo * const aerror_key_not_string; +extern const struct AspellErrorInfo * const aerror_key_not_int; +extern const struct AspellErrorInfo * const aerror_key_not_bool; +extern const struct AspellErrorInfo * const aerror_key_not_list; +extern const struct AspellErrorInfo * const aerror_no_value_reset; +extern const struct AspellErrorInfo * const aerror_no_value_enable; +extern const struct AspellErrorInfo * const aerror_no_value_disable; +extern const struct AspellErrorInfo * const aerror_no_value_clear; +extern const struct AspellErrorInfo * const aerror_language_related; +extern const struct AspellErrorInfo * const aerror_unknown_language; +extern const struct AspellErrorInfo * const aerror_unknown_soundslike; +extern const struct AspellErrorInfo * const aerror_language_not_supported; +extern const struct AspellErrorInfo * const aerror_no_wordlist_for_lang; +extern const struct AspellErrorInfo * const aerror_mismatched_language; +extern const struct AspellErrorInfo * const aerror_affix; +extern const struct AspellErrorInfo * const aerror_corrupt_affix; +extern const struct AspellErrorInfo * const aerror_invalid_cond; +extern const struct AspellErrorInfo * const aerror_invalid_cond_strip; +extern const struct AspellErrorInfo * const aerror_incorrect_encoding; +extern const struct AspellErrorInfo * const aerror_encoding; +extern const struct AspellErrorInfo * const aerror_unknown_encoding; +extern const struct AspellErrorInfo * const aerror_encoding_not_supported; +extern const struct AspellErrorInfo * const aerror_conversion_not_supported; +extern const struct AspellErrorInfo * const aerror_pipe; +extern const struct AspellErrorInfo * const aerror_cant_create_pipe; +extern const struct AspellErrorInfo * const aerror_process_died; +extern const struct AspellErrorInfo * const aerror_bad_input; +extern const struct AspellErrorInfo * const aerror_invalid_string; +extern const struct AspellErrorInfo * const aerror_invalid_word; +extern const struct AspellErrorInfo * const aerror_invalid_affix; +extern const struct AspellErrorInfo * const aerror_inapplicable_affix; +extern const struct AspellErrorInfo * const aerror_unknown_unichar; +extern const struct AspellErrorInfo * const aerror_word_list_flags; +extern const struct AspellErrorInfo * const aerror_invalid_flag; +extern const struct AspellErrorInfo * const aerror_conflicting_flags; +extern const struct AspellErrorInfo * const aerror_version_control; +extern const struct AspellErrorInfo * const aerror_bad_version_string; +extern const struct AspellErrorInfo * const aerror_filter; +extern const struct AspellErrorInfo * const aerror_cant_dlopen_file; +extern const struct AspellErrorInfo * const aerror_empty_filter; +extern const struct AspellErrorInfo * const aerror_no_such_filter; +extern const struct AspellErrorInfo * const aerror_confusing_version; +extern const struct AspellErrorInfo * const aerror_bad_version; +extern const struct AspellErrorInfo * const aerror_identical_option; +extern const struct AspellErrorInfo * const aerror_options_only; +extern const struct AspellErrorInfo * const aerror_invalid_option_modifier; +extern const struct AspellErrorInfo * const aerror_cant_describe_filter; +extern const struct AspellErrorInfo * const aerror_filter_mode_file; +extern const struct AspellErrorInfo * const aerror_mode_option_name; +extern const struct AspellErrorInfo * const aerror_no_filter_to_option; +extern const struct AspellErrorInfo * const aerror_bad_mode_key; +extern const struct AspellErrorInfo * const aerror_expect_mode_key; +extern const struct AspellErrorInfo * const aerror_mode_version_requirement; +extern const struct AspellErrorInfo * const aerror_confusing_mode_version; +extern const struct AspellErrorInfo * const aerror_bad_mode_version; +extern const struct AspellErrorInfo * const aerror_missing_magic_expression; +extern const struct AspellErrorInfo * const aerror_empty_file_ext; +extern const struct AspellErrorInfo * const aerror_filter_mode_expand; +extern const struct AspellErrorInfo * const aerror_unknown_mode; +extern const struct AspellErrorInfo * const aerror_mode_extend_expand; +extern const struct AspellErrorInfo * const aerror_filter_mode_magic; +extern const struct AspellErrorInfo * const aerror_file_magic_pos; +extern const struct AspellErrorInfo * const aerror_file_magic_range; +extern const struct AspellErrorInfo * const aerror_missing_magic; +extern const struct AspellErrorInfo * const aerror_bad_magic; +extern const struct AspellErrorInfo * const aerror_expression; +extern const struct AspellErrorInfo * const aerror_invalid_expression; + + +/******************************* speller *******************************/ + + +typedef struct AspellSpeller AspellSpeller; + + +struct AspellCanHaveError * new_aspell_speller(struct AspellConfig * config); + +struct AspellSpeller * to_aspell_speller(struct AspellCanHaveError * obj); + +void delete_aspell_speller(struct AspellSpeller * ths); + +unsigned int aspell_speller_error_number(const struct AspellSpeller * ths); + +const char * aspell_speller_error_message(const struct AspellSpeller * ths); + +const struct AspellError * aspell_speller_error(const struct AspellSpeller * ths); + +struct AspellConfig * aspell_speller_config(struct AspellSpeller * ths); + +/* Returns 0 if it is not in the dictionary, + * 1 if it is, or -1 on error. */ +int aspell_speller_check(struct AspellSpeller * ths, const char * word, int word_size); + +/* Add this word to your own personal word list. */ +int aspell_speller_add_to_personal(struct AspellSpeller * ths, const char * word, int word_size); + +/* Add this word to the current spelling session. */ +int aspell_speller_add_to_session(struct AspellSpeller * ths, const char * word, int word_size); + +/* This is your own personal word list file plus + * any extra words added during this session to + * your own personal word list. */ +const struct AspellWordList * aspell_speller_personal_word_list(struct AspellSpeller * ths); + +/* This is a list of words added to this session + * that are not in the main word list or in your + * own personal list but are considered valid for + * this spelling session. */ +const struct AspellWordList * aspell_speller_session_word_list(struct AspellSpeller * ths); + +/* This is the main list of words used during this + * spelling session. */ +const struct AspellWordList * aspell_speller_main_word_list(struct AspellSpeller * ths); + +int aspell_speller_save_all_word_lists(struct AspellSpeller * ths); + +int aspell_speller_clear_session(struct AspellSpeller * ths); + +/* Return NULL on error. + * The word list returned by suggest is only + * valid until the next call to suggest. */ +const struct AspellWordList * aspell_speller_suggest(struct AspellSpeller * ths, const char * word, int word_size); + +int aspell_speller_store_replacement(struct AspellSpeller * ths, const char * mis, int mis_size, const char * cor, int cor_size); + + + +/******************************** filter ********************************/ + + +typedef struct AspellFilter AspellFilter; + + +void delete_aspell_filter(struct AspellFilter * ths); + +unsigned int aspell_filter_error_number(const struct AspellFilter * ths); + +const char * aspell_filter_error_message(const struct AspellFilter * ths); + +const struct AspellError * aspell_filter_error(const struct AspellFilter * ths); + +struct AspellFilter * to_aspell_filter(struct AspellCanHaveError * obj); + + + +/*************************** document checker ***************************/ + + +struct AspellToken { + + unsigned int offset; + + unsigned int len; + +}; + + +typedef struct AspellToken AspellToken; + + +typedef struct AspellDocumentChecker AspellDocumentChecker; + + +void delete_aspell_document_checker(struct AspellDocumentChecker * ths); + +unsigned int aspell_document_checker_error_number(const struct AspellDocumentChecker * ths); + +const char * aspell_document_checker_error_message(const struct AspellDocumentChecker * ths); + +const struct AspellError * aspell_document_checker_error(const struct AspellDocumentChecker * ths); + +/* Creates a new document checker. + * The speller class is expected to last until + * this class is destroyed. + * If config is given it will be used to override + * any relevent options set by this speller class. + * The config class is not once this function is done. + * If filter is given then it will take ownership of + * the filter class and use it to do the filtering. + * You are expected to free the checker when done. */ +struct AspellCanHaveError * new_aspell_document_checker(struct AspellSpeller * speller); + +struct AspellDocumentChecker * to_aspell_document_checker(struct AspellCanHaveError * obj); + +/* Reset the internal state of the filter. + * Should be called whenever a new document is + * being filtered. */ +void aspell_document_checker_reset(struct AspellDocumentChecker * ths); + +/* Process a string. + * The string passed in should only be split on + * white space characters. Furthermore, between + * calls to reset, each string should be passed + * in exactly once and in the order they appeared + * in the document. Passing in strings out of + * order, skipping strings or passing them in + * more than once may lead to undefined results. */ +void aspell_document_checker_process(struct AspellDocumentChecker * ths, const char * str, int size); + +/* Returns the next misspelled word in the + * processed string. If there are no more + * misspelled words, then token.word will be + * NULL and token.size will be 0 */ +struct AspellToken aspell_document_checker_next_misspelling(struct AspellDocumentChecker * ths); + +/* Returns the underlying filter class. */ +struct AspellFilter * aspell_document_checker_filter(struct AspellDocumentChecker * ths); + + + +/****************************** word list ******************************/ + + +typedef struct AspellWordList AspellWordList; + + +int aspell_word_list_empty(const struct AspellWordList * ths); + +unsigned int aspell_word_list_size(const struct AspellWordList * ths); + +struct AspellStringEnumeration * aspell_word_list_elements(const struct AspellWordList * ths); + + + +/************************** string enumeration **************************/ + + +typedef struct AspellStringEnumeration AspellStringEnumeration; + + +void delete_aspell_string_enumeration(struct AspellStringEnumeration * ths); + +struct AspellStringEnumeration * aspell_string_enumeration_clone(const struct AspellStringEnumeration * ths); + +void aspell_string_enumeration_assign(struct AspellStringEnumeration * ths, const struct AspellStringEnumeration * other); + +int aspell_string_enumeration_at_end(const struct AspellStringEnumeration * ths); + +const char * aspell_string_enumeration_next(struct AspellStringEnumeration * ths); + + + +/********************************* info *********************************/ + + +struct AspellModuleInfo { + + const char * name; + + double order_num; + + const char * lib_dir; + + struct AspellStringList * dict_dirs; + + struct AspellStringList * dict_exts; + +}; + + +typedef struct AspellModuleInfo AspellModuleInfo; + + +struct AspellDictInfo { + + /* The Name to identify this dictionary by. */ + const char * name; + + /* The language code to identify this dictionary. + * A two letter UPPER-CASE ISO 639 language code + * and an optional two letter ISO 3166 country + * code after a dash or underscore. */ + const char * code; + + /* Any extra information to distinguish this + * variety of dictionary from other dictionaries + * which may have the same language and size. */ + const char * jargon; + + int size; + + /* A two char digit code describing the size of + * the dictionary: 10=tiny, 20=really small, + * 30=small, 40=med-small, 50=med, 60=med-large, + * 70=large, 80=huge, 90=insane. Please check + * the README in aspell-lang-200?????.tar.bz2 or + * see SCOWL (http://wordlist.sourceforge.net) + * for an example of how these sizes are used. */ + const char * size_str; + + struct AspellModuleInfo * module; + +}; + + +typedef struct AspellDictInfo AspellDictInfo; + + +typedef struct AspellModuleInfoList AspellModuleInfoList; + + +struct AspellModuleInfoList * get_aspell_module_info_list(struct AspellConfig * config); + +int aspell_module_info_list_empty(const struct AspellModuleInfoList * ths); + +unsigned int aspell_module_info_list_size(const struct AspellModuleInfoList * ths); + +struct AspellModuleInfoEnumeration * aspell_module_info_list_elements(const struct AspellModuleInfoList * ths); + + + +typedef struct AspellDictInfoList AspellDictInfoList; + + +struct AspellDictInfoList * get_aspell_dict_info_list(struct AspellConfig * config); + +int aspell_dict_info_list_empty(const struct AspellDictInfoList * ths); + +unsigned int aspell_dict_info_list_size(const struct AspellDictInfoList * ths); + +struct AspellDictInfoEnumeration * aspell_dict_info_list_elements(const struct AspellDictInfoList * ths); + + + +typedef struct AspellModuleInfoEnumeration AspellModuleInfoEnumeration; + + +int aspell_module_info_enumeration_at_end(const struct AspellModuleInfoEnumeration * ths); + +const struct AspellModuleInfo * aspell_module_info_enumeration_next(struct AspellModuleInfoEnumeration * ths); + +void delete_aspell_module_info_enumeration(struct AspellModuleInfoEnumeration * ths); + +struct AspellModuleInfoEnumeration * aspell_module_info_enumeration_clone(const struct AspellModuleInfoEnumeration * ths); + +void aspell_module_info_enumeration_assign(struct AspellModuleInfoEnumeration * ths, const struct AspellModuleInfoEnumeration * other); + + + +typedef struct AspellDictInfoEnumeration AspellDictInfoEnumeration; + + +int aspell_dict_info_enumeration_at_end(const struct AspellDictInfoEnumeration * ths); + +const struct AspellDictInfo * aspell_dict_info_enumeration_next(struct AspellDictInfoEnumeration * ths); + +void delete_aspell_dict_info_enumeration(struct AspellDictInfoEnumeration * ths); + +struct AspellDictInfoEnumeration * aspell_dict_info_enumeration_clone(const struct AspellDictInfoEnumeration * ths); + +void aspell_dict_info_enumeration_assign(struct AspellDictInfoEnumeration * ths, const struct AspellDictInfoEnumeration * other); + + + +/***************************** string list *****************************/ + + +typedef struct AspellStringList AspellStringList; + + +struct AspellStringList * new_aspell_string_list(); + +int aspell_string_list_empty(const struct AspellStringList * ths); + +unsigned int aspell_string_list_size(const struct AspellStringList * ths); + +struct AspellStringEnumeration * aspell_string_list_elements(const struct AspellStringList * ths); + +int aspell_string_list_add(struct AspellStringList * ths, const char * to_add); + +int aspell_string_list_remove(struct AspellStringList * ths, const char * to_rem); + +void aspell_string_list_clear(struct AspellStringList * ths); + +struct AspellMutableContainer * aspell_string_list_to_mutable_container(struct AspellStringList * ths); + +void delete_aspell_string_list(struct AspellStringList * ths); + +struct AspellStringList * aspell_string_list_clone(const struct AspellStringList * ths); + +void aspell_string_list_assign(struct AspellStringList * ths, const struct AspellStringList * other); + + + +/****************************** string map ******************************/ + + +typedef struct AspellStringMap AspellStringMap; + + +struct AspellStringMap * new_aspell_string_map(); + +int aspell_string_map_add(struct AspellStringMap * ths, const char * to_add); + +int aspell_string_map_remove(struct AspellStringMap * ths, const char * to_rem); + +void aspell_string_map_clear(struct AspellStringMap * ths); + +struct AspellMutableContainer * aspell_string_map_to_mutable_container(struct AspellStringMap * ths); + +void delete_aspell_string_map(struct AspellStringMap * ths); + +struct AspellStringMap * aspell_string_map_clone(const struct AspellStringMap * ths); + +void aspell_string_map_assign(struct AspellStringMap * ths, const struct AspellStringMap * other); + +int aspell_string_map_empty(const struct AspellStringMap * ths); + +unsigned int aspell_string_map_size(const struct AspellStringMap * ths); + +struct AspellStringPairEnumeration * aspell_string_map_elements(const struct AspellStringMap * ths); + +/* Insert a new element. + * Will NOT overwrite an existing entry. + * Returns FALSE if the element already exists. */ +int aspell_string_map_insert(struct AspellStringMap * ths, const char * key, const char * value); + +/* Insert a new element. + * Will overwrite an existing entry. + * Always returns TRUE. */ +int aspell_string_map_replace(struct AspellStringMap * ths, const char * key, const char * value); + +/* Looks up an element and returns the value. + * Returns NULL if the element does not exist. + * Returns an empty string if the element exists + * but has a NULL value. */ +const char * aspell_string_map_lookup(const struct AspellStringMap * ths, const char * key); + + + +/***************************** string pair *****************************/ + + +struct AspellStringPair { + + const char * first; + + const char * second; + +}; + + +typedef struct AspellStringPair AspellStringPair; + + +/*********************** string pair enumeration ***********************/ + + +typedef struct AspellStringPairEnumeration AspellStringPairEnumeration; + + +int aspell_string_pair_enumeration_at_end(const struct AspellStringPairEnumeration * ths); + +struct AspellStringPair aspell_string_pair_enumeration_next(struct AspellStringPairEnumeration * ths); + +void delete_aspell_string_pair_enumeration(struct AspellStringPairEnumeration * ths); + +struct AspellStringPairEnumeration * aspell_string_pair_enumeration_clone(const struct AspellStringPairEnumeration * ths); + +void aspell_string_pair_enumeration_assign(struct AspellStringPairEnumeration * ths, const struct AspellStringPairEnumeration * other); + + + +/******************************** cache ********************************/ + + +/* Reset the global cache(s) so that cache queries will + * create a new object. If existing objects are still in + * use they are not deleted. If which is NULL then all + * caches will be reset. Current caches are "encode", + * "decode", "dictionary", "language", and "keyboard". */ +int aspell_reset_cache(const char * which); + +#ifdef __cplusplus +} +#endif +#endif /* ASPELL_ASPELL__H */ diff --git a/jni/common/.deps/.dirstamp b/jni/common/.deps/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/common/.deps/cache.Plo b/jni/common/.deps/cache.Plo new file mode 100644 index 0000000..344596a --- /dev/null +++ b/jni/common/.deps/cache.Plo @@ -0,0 +1,228 @@ +common/cache.lo: common/cache.cpp /usr/include/assert.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + common/stack_ptr.hpp common/cache-t.hpp common/lock.hpp gen/settings.h \ + /usr/include/pthread.h /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sched.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/time.h /usr/include/bits/sched.h /usr/include/bits/time.h \ + /usr/include/xlocale.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/setjmp.h common/cache.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/bits/string3.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/sys/types.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +common/stack_ptr.hpp: + +common/cache-t.hpp: + +common/lock.hpp: + +gen/settings.h: + +/usr/include/pthread.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sched.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/time.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/time.h: + +/usr/include/xlocale.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/setjmp.h: + +common/cache.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/sys/types.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: diff --git a/jni/common/.deps/can_have_error.Plo b/jni/common/.deps/can_have_error.Plo new file mode 100644 index 0000000..54c48c3 --- /dev/null +++ b/jni/common/.deps/can_have_error.Plo @@ -0,0 +1,13 @@ +common/can_have_error.lo: common/can_have_error.cpp common/error.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp + +common/error.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: diff --git a/jni/common/.deps/config.Plo b/jni/common/.deps/config.Plo new file mode 100644 index 0000000..f0f3202 --- /dev/null +++ b/jni/common/.deps/config.Plo @@ -0,0 +1,347 @@ +common/config.lo: common/config.cpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h common/ndebug.hpp \ + /usr/include/assert.h gen/dirs.h gen/settings.h /usr/include/locale.h \ + /usr/include/bits/locale.h /usr/include/langinfo.h \ + /usr/include/nl_types.h common/cache.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/c++/4.5/algorithm \ + /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp \ + common/asc_ctype.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/key_info.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/file_util.hpp \ + common/fstream.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/getdata.hpp common/itemize.hpp \ + common/mutable_container.hpp common/string_map.hpp \ + common/string_pair.hpp common/hash.hpp /usr/include/c++/4.5/functional \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h common/block_slist.hpp \ + common/objstack.hpp common/stack_ptr.hpp common/char_vector.hpp \ + common/convert.hpp common/filter_char.hpp common/filter_char_vector.hpp \ + common/filter.hpp common/string_pair_enumeration.hpp common/vararray.hpp \ + common/string_list.hpp common/string_enumeration.hpp common/type_id.hpp \ + /usr/include/c++/4.5/cstdio common/gettext.h /usr/include/libintl.h \ + common/iostream.hpp + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +common/ndebug.hpp: + +/usr/include/assert.h: + +gen/dirs.h: + +gen/settings.h: + +/usr/include/locale.h: + +/usr/include/bits/locale.h: + +/usr/include/langinfo.h: + +/usr/include/nl_types.h: + +common/cache.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/asc_ctype.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/file_util.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/getdata.hpp: + +common/itemize.hpp: + +common/mutable_container.hpp: + +common/string_map.hpp: + +common/string_pair.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/stack_ptr.hpp: + +common/char_vector.hpp: + +common/convert.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/vararray.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +/usr/include/c++/4.5/cstdio: + +common/gettext.h: + +/usr/include/libintl.h: + +common/iostream.hpp: diff --git a/jni/common/.deps/convert.Plo b/jni/common/.deps/convert.Plo new file mode 100644 index 0000000..6e39828 --- /dev/null +++ b/jni/common/.deps/convert.Plo @@ -0,0 +1,343 @@ +common/convert.lo: common/convert.cpp /usr/include/assert.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/string.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/math.h \ + /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \ + /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \ + /usr/include/bits/nan.h /usr/include/bits/mathdef.h \ + /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h \ + common/asc_ctype.hpp common/convert.hpp common/string.hpp \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/posib_err.hpp common/error.hpp \ + common/errors.hpp common/ndebug.hpp common/char_vector.hpp \ + common/filter_char.hpp common/filter_char_vector.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/stack_ptr.hpp \ + common/filter.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/cache.hpp \ + common/fstream.hpp common/getdata.hpp common/config.hpp \ + common/key_info.hpp common/cache-t.hpp common/lock.hpp gen/settings.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/bits/sched.h \ + /usr/include/bits/setjmp.h common/file_util.hpp \ + common/file_data_util.hpp common/vararray.hpp common/iostream.hpp \ + common/gettext.h /usr/include/libintl.h + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/math.h: + +/usr/include/bits/huge_val.h: + +/usr/include/bits/huge_valf.h: + +/usr/include/bits/huge_vall.h: + +/usr/include/bits/inf.h: + +/usr/include/bits/nan.h: + +/usr/include/bits/mathdef.h: + +/usr/include/bits/mathcalls.h: + +/usr/include/bits/mathinline.h: + +common/asc_ctype.hpp: + +common/convert.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +common/fstream.hpp: + +common/getdata.hpp: + +common/config.hpp: + +common/key_info.hpp: + +common/cache-t.hpp: + +common/lock.hpp: + +gen/settings.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/setjmp.h: + +common/file_util.hpp: + +common/file_data_util.hpp: + +common/vararray.hpp: + +common/iostream.hpp: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/common/.deps/document_checker.Plo b/jni/common/.deps/document_checker.Plo new file mode 100644 index 0000000..801dd81 --- /dev/null +++ b/jni/common/.deps/document_checker.Plo @@ -0,0 +1,292 @@ +common/document_checker.lo: common/document_checker.cpp \ + common/document_checker.hpp common/filter.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/error.hpp common/filter_char.hpp \ + common/posib_err.hpp common/string.hpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/char_vector.hpp \ + common/filter_char_vector.hpp common/tokenizer.hpp common/convert.hpp \ + common/stack_ptr.hpp /usr/include/assert.h common/cache.hpp \ + common/speller.hpp common/clone_ptr.hpp common/config.hpp \ + common/key_info.hpp + +common/document_checker.hpp: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/filter_char.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/char_vector.hpp: + +common/filter_char_vector.hpp: + +common/tokenizer.hpp: + +common/convert.hpp: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/cache.hpp: + +common/speller.hpp: + +common/clone_ptr.hpp: + +common/config.hpp: + +common/key_info.hpp: diff --git a/jni/common/.deps/error.Plo b/jni/common/.deps/error.Plo new file mode 100644 index 0000000..123b6b5 --- /dev/null +++ b/jni/common/.deps/error.Plo @@ -0,0 +1,72 @@ +common/error.lo: common/error.cpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h common/error.hpp + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +common/error.hpp: diff --git a/jni/common/.deps/errors.Plo b/jni/common/.deps/errors.Plo new file mode 100644 index 0000000..d618dfc --- /dev/null +++ b/jni/common/.deps/errors.Plo @@ -0,0 +1,27 @@ +common/errors.lo: common/errors.cpp gen/settings.h common/gettext.h \ + /usr/include/libintl.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h common/error.hpp common/errors.hpp + +gen/settings.h: + +common/gettext.h: + +/usr/include/libintl.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +common/error.hpp: + +common/errors.hpp: diff --git a/jni/common/.deps/file_data_util.Plo b/jni/common/.deps/file_data_util.Plo new file mode 100644 index 0000000..b0899fd --- /dev/null +++ b/jni/common/.deps/file_data_util.Plo @@ -0,0 +1,247 @@ +common/file_data_util.lo: common/file_data_util.cpp common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/file_util.hpp \ + common/file_data_util.hpp + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/file_util.hpp: + +common/file_data_util.hpp: diff --git a/jni/common/.deps/file_util.Plo b/jni/common/.deps/file_util.Plo new file mode 100644 index 0000000..feed454 --- /dev/null +++ b/jni/common/.deps/file_util.Plo @@ -0,0 +1,314 @@ +common/file_util.lo: common/file_util.cpp gen/settings.h \ + common/config.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/file_util.hpp \ + common/fstream.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/string_list.hpp \ + common/string_enumeration.hpp common/type_id.hpp common/char_vector.hpp \ + common/mutable_container.hpp /usr/include/c++/4.5/cstdio \ + /usr/include/fcntl.h /usr/include/bits/fcntl.h /usr/include/bits/uio.h \ + /usr/include/bits/stat.h /usr/include/bits/fcntl2.h \ + /usr/include/unistd.h /usr/include/bits/posix_opt.h \ + /usr/include/bits/environments.h /usr/include/bits/confname.h \ + /usr/include/getopt.h /usr/include/bits/unistd.h /usr/include/sys/stat.h \ + /usr/include/dirent.h /usr/include/bits/dirent.h + +gen/settings.h: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/file_util.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/char_vector.hpp: + +common/mutable_container.hpp: + +/usr/include/c++/4.5/cstdio: + +/usr/include/fcntl.h: + +/usr/include/bits/fcntl.h: + +/usr/include/bits/uio.h: + +/usr/include/bits/stat.h: + +/usr/include/bits/fcntl2.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/bits/unistd.h: + +/usr/include/sys/stat.h: + +/usr/include/dirent.h: + +/usr/include/bits/dirent.h: diff --git a/jni/common/.deps/filter.Plo b/jni/common/.deps/filter.Plo new file mode 100644 index 0000000..aa2f214 --- /dev/null +++ b/jni/common/.deps/filter.Plo @@ -0,0 +1,292 @@ +common/filter.lo: common/filter.cpp gen/settings.h common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/filter.hpp \ + common/filter_char.hpp common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/speller.hpp common/clone_ptr.hpp \ + common/char_vector.hpp common/indiv_filter.hpp /usr/include/assert.h \ + common/strtonum.hpp common/asc_ctype.hpp /usr/include/dlfcn.h \ + /usr/include/bits/dlfcn.h + +gen/settings.h: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/filter.hpp: + +common/filter_char.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/speller.hpp: + +common/clone_ptr.hpp: + +common/char_vector.hpp: + +common/indiv_filter.hpp: + +/usr/include/assert.h: + +common/strtonum.hpp: + +common/asc_ctype.hpp: + +/usr/include/dlfcn.h: + +/usr/include/bits/dlfcn.h: diff --git a/jni/common/.deps/fstream.Plo b/jni/common/.deps/fstream.Plo new file mode 100644 index 0000000..75210fa --- /dev/null +++ b/jni/common/.deps/fstream.Plo @@ -0,0 +1,231 @@ +common/fstream.lo: common/fstream.cpp /usr/include/stdio.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + /usr/include/assert.h common/iostream.hpp common/fstream.hpp \ + common/string.hpp /usr/include/string.h /usr/include/xlocale.h \ + /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/posib_err.hpp common/error.hpp common/errors.hpp \ + common/ndebug.hpp common/asc_ctype.hpp + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +/usr/include/assert.h: + +common/iostream.hpp: + +common/fstream.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/asc_ctype.hpp: diff --git a/jni/common/.deps/getdata.Plo b/jni/common/.deps/getdata.Plo new file mode 100644 index 0000000..0e609d7 --- /dev/null +++ b/jni/common/.deps/getdata.Plo @@ -0,0 +1,230 @@ +common/getdata.lo: common/getdata.cpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h common/getdata.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/string.hpp /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp common/mutable_string.hpp common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/asc_ctype.hpp common/iostream.hpp \ + common/fstream.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/posib_err.hpp common/error.hpp \ + common/errors.hpp common/ndebug.hpp + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +common/getdata.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/asc_ctype.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: diff --git a/jni/common/.deps/gettext_init.Plo b/jni/common/.deps/gettext_init.Plo new file mode 100644 index 0000000..71a4a22 --- /dev/null +++ b/jni/common/.deps/gettext_init.Plo @@ -0,0 +1,3 @@ +common/gettext_init.lo: common/gettext_init.cpp common/gettext.h + +common/gettext.h: diff --git a/jni/common/.deps/info.Plo b/jni/common/.deps/info.Plo new file mode 100644 index 0000000..3d15582 --- /dev/null +++ b/jni/common/.deps/info.Plo @@ -0,0 +1,339 @@ +common/info.lo: common/info.cpp /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h /usr/include/assert.h \ + /usr/include/string.h /usr/include/bits/string3.h /usr/include/ctype.h \ + /usr/include/dirent.h /usr/include/bits/dirent.h \ + /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h \ + /usr/include/linux/limits.h common/iostream.hpp common/fstream.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/string.hpp \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix2_lim.h \ + /usr/include/bits/xopen_lim.h common/mutable_string.hpp \ + common/ostream.hpp common/istream.hpp common/posib_err.hpp \ + common/error.hpp common/errors.hpp common/ndebug.hpp \ + common/asc_ctype.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/key_info.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/getdata.hpp common/info.hpp \ + common/type_id.hpp common/itemize.hpp common/string_list.hpp \ + common/string_enumeration.hpp common/char_vector.hpp \ + common/mutable_container.hpp /usr/include/c++/4.5/cstdio \ + common/stack_ptr.hpp common/strtonum.hpp common/lock.hpp gen/settings.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/bits/sched.h \ + /usr/include/bits/setjmp.h common/string_map.hpp common/string_pair.hpp \ + common/hash.hpp /usr/include/c++/4.5/functional \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h common/block_slist.hpp \ + common/objstack.hpp common/gettext.h /usr/include/libintl.h + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/assert.h: + +/usr/include/string.h: + +/usr/include/bits/string3.h: + +/usr/include/ctype.h: + +/usr/include/dirent.h: + +/usr/include/bits/dirent.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +common/iostream.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/string.hpp: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/asc_ctype.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/getdata.hpp: + +common/info.hpp: + +common/type_id.hpp: + +common/itemize.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/char_vector.hpp: + +common/mutable_container.hpp: + +/usr/include/c++/4.5/cstdio: + +common/stack_ptr.hpp: + +common/strtonum.hpp: + +common/lock.hpp: + +gen/settings.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/setjmp.h: + +common/string_map.hpp: + +common/string_pair.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/common/.deps/iostream.Plo b/jni/common/.deps/iostream.Plo new file mode 100644 index 0000000..1bf963e --- /dev/null +++ b/jni/common/.deps/iostream.Plo @@ -0,0 +1,227 @@ +common/iostream.lo: common/iostream.cpp common/iostream.hpp \ + common/fstream.hpp /usr/include/stdio.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/string.hpp \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/bits/stdlib.h /usr/include/c++/4.5/algorithm \ + /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/posib_err.hpp common/error.hpp common/errors.hpp \ + common/ndebug.hpp + +common/iostream.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: diff --git a/jni/common/.deps/itemize.Plo b/jni/common/.deps/itemize.Plo new file mode 100644 index 0000000..3824141 --- /dev/null +++ b/jni/common/.deps/itemize.Plo @@ -0,0 +1,230 @@ +common/itemize.lo: common/itemize.cpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h common/asc_ctype.hpp \ + common/itemize.hpp common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/posib_err.hpp common/string.hpp \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/mutable_string.hpp common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + common/mutable_container.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h /usr/include/c++/4.5/cstdio + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +common/asc_ctype.hpp: + +common/itemize.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/mutable_container.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +/usr/include/c++/4.5/cstdio: diff --git a/jni/common/.deps/objstack.Plo b/jni/common/.deps/objstack.Plo new file mode 100644 index 0000000..a301521 --- /dev/null +++ b/jni/common/.deps/objstack.Plo @@ -0,0 +1,101 @@ +common/objstack.lo: common/objstack.cpp common/objstack.hpp \ + common/parm_string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h /usr/include/assert.h + +common/objstack.hpp: + +common/parm_string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/assert.h: diff --git a/jni/common/.deps/posib_err.Plo b/jni/common/.deps/posib_err.Plo new file mode 100644 index 0000000..63fc432 --- /dev/null +++ b/jni/common/.deps/posib_err.Plo @@ -0,0 +1,226 @@ +common/posib_err.lo: common/posib_err.cpp /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + /usr/include/assert.h common/posib_err.hpp common/string.hpp \ + /usr/include/string.h /usr/include/bits/string3.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/error.hpp common/errors.hpp common/ndebug.hpp common/gettext.h + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +/usr/include/assert.h: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/bits/string3.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/gettext.h: diff --git a/jni/common/.deps/speller.Plo b/jni/common/.deps/speller.Plo new file mode 100644 index 0000000..08e4dc9 --- /dev/null +++ b/jni/common/.deps/speller.Plo @@ -0,0 +1,294 @@ +common/speller.lo: common/speller.cpp common/speller.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/clone_ptr.hpp common/mutable_string.hpp \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/posib_err.hpp common/string.hpp \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp \ + common/char_vector.hpp common/convert.hpp common/filter_char.hpp \ + common/filter_char_vector.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/stack_ptr.hpp \ + /usr/include/assert.h common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/cache.hpp \ + common/clone_ptr-t.hpp /usr/include/c++/4.5/typeinfo common/config.hpp \ + common/key_info.hpp + +common/speller.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/clone_ptr.hpp: + +common/mutable_string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/char_vector.hpp: + +common/convert.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +common/clone_ptr-t.hpp: + +/usr/include/c++/4.5/typeinfo: + +common/config.hpp: + +common/key_info.hpp: diff --git a/jni/common/.deps/string.Plo b/jni/common/.deps/string.Plo new file mode 100644 index 0000000..42e025b --- /dev/null +++ b/jni/common/.deps/string.Plo @@ -0,0 +1,215 @@ +common/string.lo: common/string.cpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/stdio.h /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/string.hpp \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/bits/stdlib.h /usr/include/c++/4.5/algorithm \ + /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/asc_ctype.hpp + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/asc_ctype.hpp: diff --git a/jni/common/.deps/string_list.Plo b/jni/common/.deps/string_list.Plo new file mode 100644 index 0000000..8bed9d1 --- /dev/null +++ b/jni/common/.deps/string_list.Plo @@ -0,0 +1,237 @@ +common/string_list.lo: common/string_list.cpp common/string_list.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/char_vector.hpp common/mutable_container.hpp common/posib_err.hpp \ + common/error.hpp common/errors.hpp common/ndebug.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + /usr/include/c++/4.5/cstdio + +common/string_list.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/char_vector.hpp: + +common/mutable_container.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +/usr/include/c++/4.5/cstdio: diff --git a/jni/common/.deps/string_map.Plo b/jni/common/.deps/string_map.Plo new file mode 100644 index 0000000..e2583c5 --- /dev/null +++ b/jni/common/.deps/string_map.Plo @@ -0,0 +1,242 @@ +common/string_map.lo: common/string_map.cpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/assert.h \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/string_map.hpp \ + common/mutable_container.hpp common/posib_err.hpp common/string.hpp \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/mutable_string.hpp common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + common/string_pair.hpp common/hash.hpp /usr/include/c++/4.5/functional \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h gen/settings.h \ + common/block_slist.hpp common/objstack.hpp \ + common/string_pair_enumeration.hpp common/hash-t.hpp \ + common/block_slist-t.hpp /usr/include/c++/4.5/cassert + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/assert.h: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/string_map.hpp: + +common/mutable_container.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/string_pair.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +gen/settings.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/string_pair_enumeration.hpp: + +common/hash-t.hpp: + +common/block_slist-t.hpp: + +/usr/include/c++/4.5/cassert: diff --git a/jni/common/.deps/strtonum.Plo b/jni/common/.deps/strtonum.Plo new file mode 100644 index 0000000..7b1d811 --- /dev/null +++ b/jni/common/.deps/strtonum.Plo @@ -0,0 +1,71 @@ +common/strtonum.lo: common/strtonum.cpp /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h common/strtonum.hpp \ + common/asc_ctype.hpp + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +common/strtonum.hpp: + +common/asc_ctype.hpp: diff --git a/jni/common/.deps/tokenizer.Plo b/jni/common/.deps/tokenizer.Plo new file mode 100644 index 0000000..305f161 --- /dev/null +++ b/jni/common/.deps/tokenizer.Plo @@ -0,0 +1,280 @@ +common/tokenizer.lo: common/tokenizer.cpp common/tokenizer.hpp \ + common/char_vector.hpp common/string.hpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/filter_char.hpp common/filter_char_vector.hpp \ + common/vector.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/convert.hpp \ + common/posib_err.hpp common/error.hpp common/errors.hpp \ + common/ndebug.hpp common/stack_ptr.hpp /usr/include/assert.h \ + common/filter.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/cache.hpp + +common/tokenizer.hpp: + +common/char_vector.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/convert.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: diff --git a/jni/common/.dirstamp b/jni/common/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/common/Makefile b/jni/common/Makefile new file mode 100644 index 0000000..9141085 --- /dev/null +++ b/jni/common/Makefile @@ -0,0 +1,4 @@ +top_srcdir = .. + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/common/Makefile.in b/jni/common/Makefile.in new file mode 100644 index 0000000..60bc80d --- /dev/null +++ b/jni/common/Makefile.in @@ -0,0 +1,4 @@ +top_srcdir = @top_srcdir@ + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/common/asc_ctype.hpp b/jni/common/asc_ctype.hpp new file mode 100644 index 0000000..2d48305 --- /dev/null +++ b/jni/common/asc_ctype.hpp @@ -0,0 +1,44 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASC_CTYPE__HPP +#define ASC_CTYPE__HPP + +namespace acommon { + + static inline bool asc_isspace(int c) + { + return c==' ' || c=='\n' || c=='\r' || c=='\t' || c=='\f' || c=='\v'; + } + + static inline bool asc_isdigit(int c) + { + return '0' <= c && c <= '9'; + } + static inline bool asc_islower(int c) + { + return 'a' <= c && c <= 'z'; + } + static inline bool asc_isupper(int c) + { + return 'A' <= c && c <= 'Z'; + } + static inline bool asc_isalpha(int c) + { + return asc_islower(c) || asc_isupper(c); + } + static inline int asc_tolower(int c) + { + return asc_isupper(c) ? c + 0x20 : c; + } + static inline int asc_toupper(int c) + { + return asc_islower(c) ? c - 0x20 : c; + } + +} + +#endif diff --git a/jni/common/basic_list.hpp b/jni/common/basic_list.hpp new file mode 100644 index 0000000..c8072fe --- /dev/null +++ b/jni/common/basic_list.hpp @@ -0,0 +1,68 @@ +#ifndef autil__basic_list_hh +#define autil__basic_list_hh + +#include <list> +//#include <ext/slist> + +//#include <assert.h> + +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +// BasicList is a simple list structure which can either be +// implemented as a singly or doubly linked list. I created it +// because a Singly liked list is not part of the C++ standard however +// the Doubly Linked list does not have the same methods as the doubly +// linked list because the singly linked list has a bunch of special +// methods to address the fact that it is far faster to insert +// elements before the position pointed to by an iterator is far faster +// than inserting elements after the current position which is what is +// normally done. Thus it is not possibly to simply substitute a singly +// linked list with a doubly linked list by changing the name of the +// container used. This list currently acts as a wrapper for the list +// (doubly linked list) STL class however it can also very easily be +// written as a wrapper for the slist (singly linked list) class when +// it is available (slist is part of the SGI STL but not the C++ +// standard) for better performance. + +namespace acommon { + + template <typename T> + class BasicList { + //typedef __gnu_cxx::slist<T> List; + typedef std::list<T> List; + List data_; + public: + // treat the iterators as forward iterators only + typedef typename List::iterator iterator; + typedef typename List::const_iterator const_iterator; + typedef typename List::size_type size_type; + bool empty() {return data_.empty();} + void clear() {data_.clear();} + size_type size() {return data_.size();} + iterator begin() {return data_.begin();} + iterator end() {return data_.end();} + const_iterator begin() const {return data_.begin();} + const_iterator end() const {return data_.end();} + void push_front(const T & item) {data_.push_front(item);} + void pop_front() {data_.pop_front();} + T & front() {return data_.front();} + const T & front() const {return data_.front();} + void swap(BasicList & other) {data_.swap(other.data_);} + void sort() {data_.sort();} + template<class Pred> void sort(Pred pr) {data_.sort(pr);} + void splice_into (BasicList & other, iterator prev, iterator cur) + { + //++prev; + //assert (prev == cur); + data_.splice(data_.begin(),other.data_,cur); + //data_.splice_after(data_.begin(), prev); + } + }; + +} + +#endif diff --git a/jni/common/block_slist-t.hpp b/jni/common/block_slist-t.hpp new file mode 100644 index 0000000..669c4bd --- /dev/null +++ b/jni/common/block_slist-t.hpp @@ -0,0 +1,55 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef autil__block_slist_t_hh +#define autil__block_slist_t_hh + +#include <cstdlib> +#include <cassert> + +#include "block_slist.hpp" + +namespace acommon { + + template <typename T> + void BlockSList<T>::add_block(unsigned int num) + { + assert (reinterpret_cast<const char *>(&(first_available->next)) + == + reinterpret_cast<const char *>(first_available)); + const unsigned int ptr_offset = + reinterpret_cast<const char *>(&(first_available->data)) + - reinterpret_cast<const char *>(&(first_available->next)); + void * block = malloc( ptr_offset + sizeof(Node) * num ); + *reinterpret_cast<void **>(block) = first_block; + first_block = block; + Node * first = reinterpret_cast<Node *>(reinterpret_cast<char *>(block) + ptr_offset); + Node * i = first; + Node * last = i + num; + while (i + 1 != last) { + i->next = i + 1; + i = i + 1; + } + i->next = 0; + first_available = first; + } + + template <typename T> + void BlockSList<T>::clear() + { + void * i = first_block; + while (i != 0) { + void * n = *reinterpret_cast<void **>(i); + free(i); + i = n; + } + first_block = 0; + first_available = 0; + } + +} + +#endif diff --git a/jni/common/block_slist.hpp b/jni/common/block_slist.hpp new file mode 100644 index 0000000..3c9a025 --- /dev/null +++ b/jni/common/block_slist.hpp @@ -0,0 +1,76 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef autil__block_slist_hh +#define autil__block_slist_hh + +// BlockSList provided a pool of nodes which can be used for singly +// linked lists. Nodes are allocated in large chunks instead of +// one at a time which means that getting a new node is very fast. +// Nodes returned are not initialized in any way. A placement new +// must be used to construct the the data member and the destructor +// must explicitly be called. + +namespace acommon { + + template <typename T> + class BlockSList { + + public: + + struct Node { + Node * next; + T data; + }; + + private: + + void * first_block; + Node * first_available; + + BlockSList(const BlockSList &); + BlockSList & operator= (const BlockSList &); + + public: + + BlockSList() + // Default constructor. + // add_block must be called before any nodes are available + : first_block(0), first_available(0) {}; + + Node * new_node() + // return a new_node if one is available or null otherwise + // Note: the node's data member is NOT initialized in any way. + { + Node * n = first_available; + if (n != 0) + first_available = first_available->next; + return n; + } + + void remove_node(Node * n) + // marks the node as availabe + // Note: the node's data memeber destructor is NOT called + { + n->next = first_available; + first_available = n; + } + + void add_block(unsigned int num); + // allocate enough memory for an additional num nodes + + void clear(); + // free all memory. add_block must then be called before any nodes + // are available + // Note: the node's data member destructor is NOT called + + + ~BlockSList() {clear();} + + }; + +} +#endif diff --git a/jni/common/cache-t.hpp b/jni/common/cache-t.hpp new file mode 100644 index 0000000..c326fd2 --- /dev/null +++ b/jni/common/cache-t.hpp @@ -0,0 +1,101 @@ +#ifndef ACOMMON_CACHE_T__HPP +#define ACOMMON_CACHE_T__HPP + +#include "lock.hpp" +#include "cache.hpp" + +//#include "iostream.hpp" + +namespace acommon { + +class GlobalCacheBase +{ +public: + mutable Mutex lock; +public: // but don't use + const char * name; + GlobalCacheBase * next; + GlobalCacheBase * * prev; +protected: + Cacheable * first; + void del(Cacheable * d); + void add(Cacheable * n); + GlobalCacheBase(const char * n); + ~GlobalCacheBase(); +public: + void release(Cacheable * d); + void detach(Cacheable * d); + void detach_all(); +}; + +template <class D> +class GlobalCache : public GlobalCacheBase +{ +public: + typedef D Data; + typedef typename Data::CacheKey Key; +public: + GlobalCache(const char * n) : GlobalCacheBase(n) {} + // "find" and "add" will _not_ acquire a lock + Data * find(const Key & key) { + D * cur = static_cast<D *>(first); + while (cur && !cur->cache_key_eq(key)) + cur = static_cast<D *>(cur->next); + return cur; + } + void add(Data * n) {GlobalCacheBase::add(n);} + // "release" and "detach" _will_ acquire a lock + void release(Data * d) {GlobalCacheBase::release(d);} + void detach(Data * d) {GlobalCacheBase::detach(d);} +}; + +template <class Data> +PosibErr<Data *> get_cache_data(GlobalCache<Data> * cache, + typename Data::CacheConfig * config, + const typename Data::CacheKey & key) +{ + LOCK(&cache->lock); + Data * n = cache->find(key); + //CERR << "Getting " << key << " for " << cache->name << "\n"; + if (n) { + n->refcount++; + return n; + } + PosibErr<Data *> res = Data::get_new(key, config); + if (res.has_err()) { + //CERR << "ERROR\n"; + return res; + } + n = res.data; + cache->add(n); + //CERR << "LOADED FROM DISK\n"; + return n; +} + +template <class Data> +PosibErr<Data *> get_cache_data(GlobalCache<Data> * cache, + typename Data::CacheConfig * config, + typename Data::CacheConfig2 * config2, + const typename Data::CacheKey & key) +{ + LOCK(&cache->lock); + Data * n = cache->find(key); + //CERR << "Getting " << key << "\n"; + if (n) { + n->refcount++; + return n; + } + PosibErr<Data *> res = Data::get_new(key, config, config2); + if (res.has_err()) { + //CERR << "ERROR\n"; + return res; + } + n = res.data; + cache->add(n); + //CERR << "LOADED FROM DISK\n"; + return n; +} + +} + +#endif diff --git a/jni/common/cache.cpp b/jni/common/cache.cpp new file mode 100644 index 0000000..c4884e5 --- /dev/null +++ b/jni/common/cache.cpp @@ -0,0 +1,122 @@ +#include <assert.h> + +#include "stack_ptr.hpp" +#include "cache-t.hpp" + +namespace acommon { + +static StackPtr<Mutex> global_cache_lock(new Mutex); +static GlobalCacheBase * first_cache = 0; + +void Cacheable::copy() const +{ + //CERR << "COPY\n"; + LOCK(&cache->lock); + copy_no_lock(); +} + +void GlobalCacheBase::del(Cacheable * n) +{ + *n->prev = n->next; + if (n->next) n->next->prev = n->prev; + n->next = 0; + n->prev = 0; +} + +void GlobalCacheBase::add(Cacheable * n) +{ + assert(n->refcount > 0); + n->next = first; + n->prev = &first; + if (first) first->prev = &n->next; + first = n; + n->cache = this; +} + +void GlobalCacheBase::release(Cacheable * d) +{ + //CERR << "RELEASE\n"; + LOCK(&lock); + d->refcount--; + assert(d->refcount >= 0); + if (d->refcount != 0) return; + //CERR << "DEL\n"; + if (d->attached()) del(d); + delete d; +} + +void GlobalCacheBase::detach(Cacheable * d) +{ + LOCK(&lock); + if (d->attached()) del(d); +} + +void GlobalCacheBase::detach_all() +{ + LOCK(&lock); + Cacheable * p = first; + while (p) { + *p->prev = 0; + p->prev = 0; + p = p->next; + } +} + +void release_cache_data(GlobalCacheBase * cache, const Cacheable * d) +{ + cache->release(const_cast<Cacheable *>(d)); +} + +GlobalCacheBase::GlobalCacheBase(const char * n) + : name (n) +{ + LOCK(global_cache_lock); + next = first_cache; + prev = &first_cache; + if (first_cache) first_cache->prev = &next; + first_cache = this; +} + +GlobalCacheBase::~GlobalCacheBase() +{ + detach_all(); + LOCK(global_cache_lock); + *prev = next; + if (next) next->prev = prev; +} + +bool reset_cache(const char * which) +{ + LOCK(global_cache_lock); + bool any = false; + for (GlobalCacheBase * i = first_cache; i; i = i->next) + { + if (which && strcmp(i->name, which) == 0) {i->detach_all(); any = true;} + } + return any; +} + +extern "C" +int aspell_reset_cache(const char * which) +{ + return reset_cache(which); +} + +#if 0 + +struct CacheableImpl : public Cacheable +{ + class CacheConfig; + typedef String CacheKey; + bool cache_key_eq(const CacheKey &); + static PosibErr<CacheableImpl *> get_new(const CacheKey &, CacheConfig *); +}; + +template +PosibErr<CacheableImpl *> get_cache_data(GlobalCache<CacheableImpl> *, + CacheableImpl::CacheConfig *, + const CacheableImpl::CacheKey &); + +#endif + +} diff --git a/jni/common/cache.hpp b/jni/common/cache.hpp new file mode 100644 index 0000000..8770afc --- /dev/null +++ b/jni/common/cache.hpp @@ -0,0 +1,86 @@ +#ifndef ACOMMON_CACHE__HPP +#define ACOMMON_CACHE__HPP + +#include "posib_err.hpp" + +namespace acommon { + +class GlobalCacheBase; +template <class Data> class GlobalCache; + +// get_cache_data (both versions) and release_cache_data will acquires +// the cache's lock + +template <class Data> +PosibErr<Data *> get_cache_data(GlobalCache<Data> *, + typename Data::CacheConfig *, + const typename Data::CacheKey &); +template <class Data> +PosibErr<Data *> get_cache_data(GlobalCache<Data> *, + typename Data::CacheConfig *, + typename Data::CacheConfig2 *, + const typename Data::CacheKey &); + +class Cacheable; +void release_cache_data(GlobalCacheBase *, const Cacheable *); +static inline void release_cache_data(const GlobalCacheBase * c, const Cacheable * d) +{ + release_cache_data(const_cast<GlobalCacheBase *>(c),d); +} + +class Cacheable +{ +public: // but don't use + Cacheable * next; + Cacheable * * prev; + mutable int refcount; + GlobalCacheBase * cache; +public: + bool attached() {return prev;} + void copy_no_lock() const {refcount++;} + void copy() const; // Acquires cache->lock + void release() const {release_cache_data(cache,this);} // Acquires cache->lock + Cacheable(GlobalCacheBase * c = 0) : next(0), prev(0), refcount(1), cache(c) {} + virtual ~Cacheable() {} +}; + +template <class Data> +class CachePtr +{ + Data * ptr; + +public: + void reset(Data * p) { + if (ptr) ptr->release(); + ptr = p; + } + void copy(Data * p) {if (p) p->copy(); reset(p);} + Data * release() {Data * tmp = ptr; ptr = 0; return tmp;} + + Data & operator* () const {return *ptr;} + Data * operator-> () const {return ptr;} + Data * get() const {return ptr;} + operator Data * () const {return ptr;} + + CachePtr() : ptr(0) {} + CachePtr(const CachePtr & other) {ptr = other.ptr; if (ptr) ptr->copy();} + void operator=(const CachePtr & other) {copy(other.ptr);} + ~CachePtr() {reset(0);} +}; + +template <class Data> +PosibErr<void> setup(CachePtr<Data> & res, + GlobalCache<Data> * cache, + typename Data::CacheConfig * config, + const typename Data::CacheKey & key) { + PosibErr<Data *> pe = get_cache_data(cache, config, key); + if (pe.has_err()) return pe; + res.reset(pe.data); + return no_err; +} + +bool reset_cache(const char * = 0); + +} + +#endif diff --git a/jni/common/cache.lo b/jni/common/cache.lo new file mode 100644 index 0000000..9ad66df --- /dev/null +++ b/jni/common/cache.lo @@ -0,0 +1,12 @@ +# common/cache.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/cache.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/can_have_error.cpp b/jni/common/can_have_error.cpp new file mode 100644 index 0000000..42bfb79 --- /dev/null +++ b/jni/common/can_have_error.cpp @@ -0,0 +1,30 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "error.hpp" +#include "can_have_error.hpp" + +namespace acommon { + + CanHaveError::CanHaveError(Error * e) + : err_(e) + {} + + CanHaveError::~CanHaveError() + {} + + CanHaveError::CanHaveError(const CanHaveError & other) + : err_(other.err_) {} + + + CanHaveError & CanHaveError::operator=(const CanHaveError & other) + { + err_ = other.err_; + return *this; + } + + +} diff --git a/jni/common/can_have_error.hpp b/jni/common/can_have_error.hpp new file mode 100644 index 0000000..aae735d --- /dev/null +++ b/jni/common/can_have_error.hpp @@ -0,0 +1,29 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_CAN_HAVE_ERROR__HPP +#define ASPELL_CAN_HAVE_ERROR__HPP + +#include "copy_ptr.hpp" +#include "error.hpp" + +namespace acommon { + +struct Error; + +class CanHaveError { + public: + CanHaveError(Error * e = 0); + CopyPtr<Error> err_; + virtual ~CanHaveError(); + CanHaveError(const CanHaveError &); + CanHaveError & operator=(const CanHaveError &); +}; + + +} + +#endif /* ASPELL_CAN_HAVE_ERROR__HPP */ diff --git a/jni/common/can_have_error.lo b/jni/common/can_have_error.lo new file mode 100644 index 0000000..2eacf39 --- /dev/null +++ b/jni/common/can_have_error.lo @@ -0,0 +1,12 @@ +# common/can_have_error.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/can_have_error.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/char_vector.hpp b/jni/common/char_vector.hpp new file mode 100644 index 0000000..6ef061b --- /dev/null +++ b/jni/common/char_vector.hpp @@ -0,0 +1,18 @@ +// This file is part of The New Aspell +// Copyright (C) 2001-2003 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_CHAR_VECTOR__HPP +#define ASPELL_CHAR_VECTOR__HPP + +#include "string.hpp" +#include "ostream.hpp" + +namespace acommon +{ + typedef String CharVector; +} + +#endif diff --git a/jni/common/clone_ptr-t.hpp b/jni/common/clone_ptr-t.hpp new file mode 100644 index 0000000..05e7b79 --- /dev/null +++ b/jni/common/clone_ptr-t.hpp @@ -0,0 +1,45 @@ +// Copyright (c) 2001 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef autil__clone_ptr_t +#define autil__clone_ptr_t + +#include "clone_ptr.hpp" +#include <typeinfo> +#include "generic_copy_ptr-t.hpp" + +namespace acommon { + + template <typename T> + inline T * ClonePtr<T>::Parms::clone(const T * ptr) const { + return ptr->clone(); + } + + template <typename T> + void ClonePtr<T>::Parms::assign(T * & rhs, const T * lhs) const { + if (typeid(*rhs) == typeid(*lhs)) { + rhs->assign(lhs); + } else { + T * temp = rhs; + rhs = lhs->clone(); + delete temp; + } + } + + template <typename T> + inline void ClonePtr<T>::Parms::del(T * ptr) { + delete ptr; + } + +} + +#endif diff --git a/jni/common/clone_ptr.hpp b/jni/common/clone_ptr.hpp new file mode 100644 index 0000000..a4a6eef --- /dev/null +++ b/jni/common/clone_ptr.hpp @@ -0,0 +1,54 @@ +// Copyright (c) 2001 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef autil__clone_ptr +#define autil__clone_ptr + +#include "generic_copy_ptr.hpp" + +namespace acommon { + + template <typename T> + class ClonePtr + { + struct Parms { + T * clone(const T * ptr) const; + void assign(T * & rhs, const T * lhs) const; + void del(T * ptr); + }; + GenericCopyPtr<T, Parms> impl; + + public: + + explicit ClonePtr(T * p = 0) : impl(p) {} + ClonePtr(const ClonePtr & other) : impl(other.impl) {} + + ClonePtr & operator=(const ClonePtr & other) { + impl = other.impl; + return *this; + } + + void assign(const T * other) {impl.assign(other);} + void reset(T * other = 0) {impl.reset(other);} + + T & operator* () const {return *impl;} + T * operator-> () const {return impl;} + T * get() const {return impl;} + operator T * () const {return impl;} + + T * release() {return impl.release();} + }; + +} + +#endif + diff --git a/jni/common/config.cpp b/jni/common/config.cpp new file mode 100644 index 0000000..b1e919b --- /dev/null +++ b/jni/common/config.cpp @@ -0,0 +1,1525 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +//#include <stdio.h> +//#define DEBUG {fprintf(stderr,"File: %s(%i)\n",__FILE__,__LINE__);} +#include <string.h> +#include <stdlib.h> +#include "ndebug.hpp" +#include <assert.h> + +#include "dirs.h" +#include "settings.h" + +#ifdef USE_LOCALE +# include <locale.h> +#endif + +#ifdef HAVE_LANGINFO_CODESET +# include <langinfo.h> +#endif + +#include "cache.hpp" +#include "asc_ctype.hpp" +#include "config.hpp" +#include "errors.hpp" +#include "file_util.hpp" +#include "fstream.hpp" +#include "getdata.hpp" +#include "itemize.hpp" +#include "mutable_container.hpp" +#include "posib_err.hpp" +#include "string_map.hpp" +#include "stack_ptr.hpp" +#include "char_vector.hpp" +#include "convert.hpp" +#include "vararray.hpp" +#include "string_list.hpp" + +#include "gettext.h" + +#include "iostream.hpp" + +#define DEFAULT_LANG "en_US" + +// NOTE: All filter options are now stored with he "f-" prefix. However +// during lookup, the non prefix version is also recognized. + +// The "place_holder" field in Entry and the "Vector<int>" parameter of +// commit_all are there to deal with the fact than when spacing +// options on the command line such as "--key what" it can not be +// determined if "what" should be a the value of "key" or if it should +// be treated as an independent arg. This is because "key" may +// be a filter option. Filter options KeyInfo are not loaded until +// after a commit which is not done at the time the options are being +// read in from the command line. (If the command line arguments are +// read in after the other settings are read in and committed than any +// options setting any of the config files will be ignored. Thus the +// command line must be parsed and options must be added in an +// uncommitted state). So the solution is to assume it is an +// independent arg until told otherwise, the position in the arg array +// is stored along with the value in the "place_holder" field. When +// the config class is finally committed and it is determined that +// "what" is really a value for key the stored arg position is pushed +// onto the Vector<int> so it can be removed from the arg array. In +// the case of a "lset-*" this will happen in multiple config +// "Entry"s, so care is taken to only add the arg position once. + +namespace acommon { + + const char * const keyinfo_type_name[4] = { + N_("string"), N_("integer"), N_("boolean"), N_("list") + }; + + const int Config::num_parms_[9] = {1, 1, 0, 0, 0, + 1, 1, 1, 0}; + + typedef Notifier * NotifierPtr; + + Config::Config(ParmStr name, + const KeyInfo * mainbegin, + const KeyInfo * mainend) + : name_(name) + , first_(0), insert_point_(&first_), others_(0) + , committed_(true), attached_(false) + , md_info_list_index(-1) + , settings_read_in_(false) + , load_filter_hook(0) + , filter_mode_notifier(0) + { + keyinfo_begin = mainbegin; + keyinfo_end = mainend; + extra_begin = 0; + extra_end = 0; + } + + Config::~Config() { + del(); + } + + Config::Config(const Config & other) + { + copy(other); + } + + Config & Config::operator= (const Config & other) + { + del(); + copy(other); + return *this; + } + + Config * Config::clone() const { + return new Config(*this); + } + + void Config::assign(const Config * other) { + *this = *(const Config *)(other); + } + + void Config::copy(const Config & other) + { + assert(other.others_ == 0); + others_ = 0; + + name_ = other.name_; + + committed_ = other.committed_; + attached_ = other.attached_; + settings_read_in_ = other.settings_read_in_; + + keyinfo_begin = other.keyinfo_begin; + keyinfo_end = other.keyinfo_end; + extra_begin = other.extra_begin; + extra_end = other.extra_end; + filter_modules = other.filter_modules; + +#ifdef HAVE_LIBDL + filter_modules_ptrs = other.filter_modules_ptrs; + for (Vector<Cacheable *>::iterator i = filter_modules_ptrs.begin(); + i != filter_modules_ptrs.end(); + ++i) + (*i)->copy(); +#endif + + md_info_list_index = other.md_info_list_index; + + insert_point_ = 0; + Entry * const * src = &other.first_; + Entry * * dest = &first_; + while (*src) + { + *dest = new Entry(**src); + if (src == other.insert_point_) + insert_point_ = dest; + src = &((*src)->next); + dest = &((*dest)->next); + } + if (insert_point_ == 0) + insert_point_ = dest; + *dest = 0; + + Vector<Notifier *>::const_iterator i = other.notifier_list.begin(); + Vector<Notifier *>::const_iterator end = other.notifier_list.end(); + + for(; i != end; ++i) { + Notifier * tmp = (*i)->clone(this); + if (tmp != 0) + notifier_list.push_back(tmp); + } + } + + void Config::del() + { + while (first_) { + Entry * tmp = first_->next; + delete first_; + first_ = tmp; + } + + while (others_) { + Entry * tmp = others_->next; + delete first_; + others_ = tmp; + } + + Vector<Notifier *>::iterator i = notifier_list.begin(); + Vector<Notifier *>::iterator end = notifier_list.end(); + + for(; i != end; ++i) { + delete (*i); + *i = 0; + } + + notifier_list.clear(); + +#ifdef HAVE_LIBDL + filter_modules.clear(); + for (Vector<Cacheable *>::iterator i = filter_modules_ptrs.begin(); + i != filter_modules_ptrs.end(); + ++i) + (*i)->release(); + filter_modules_ptrs.clear(); +#endif + } + + void Config::set_filter_modules(const ConfigModule * modbegin, + const ConfigModule * modend) + { + assert(filter_modules_ptrs.empty()); + filter_modules.clear(); + filter_modules.assign(modbegin, modend); + } + + void Config::set_extra(const KeyInfo * begin, + const KeyInfo * end) + { + extra_begin = begin; + extra_end = end; + } + + // + // + // + + + // + // Notifier methods + // + + NotifierEnumeration * Config::notifiers() const + { + return new NotifierEnumeration(notifier_list); + } + + bool Config::add_notifier(Notifier * n) + { + Vector<Notifier *>::iterator i = notifier_list.begin(); + Vector<Notifier *>::iterator end = notifier_list.end(); + + while (i != end && *i != n) + ++i; + + if (i != end) { + + return false; + + } else { + + notifier_list.push_back(n); + return true; + + } + } + + bool Config::remove_notifier(const Notifier * n) + { + Vector<Notifier *>::iterator i = notifier_list.begin(); + Vector<Notifier *>::iterator end = notifier_list.end(); + + while (i != end && *i != n) + ++i; + + if (i == end) { + + return false; + + } else { + + delete *i; + notifier_list.erase(i); + return true; + + } + } + + bool Config::replace_notifier(const Notifier * o, + Notifier * n) + { + Vector<Notifier *>::iterator i = notifier_list.begin(); + Vector<Notifier *>::iterator end = notifier_list.end(); + + while (i != end && *i != o) + ++i; + + if (i == end) { + + return false; + + } else { + + delete *i; + *i = n; + return true; + + } + } + + // + // retrieve methods + // + + const Config::Entry * Config::lookup(const char * key) const + { + const Entry * res = 0; + const Entry * cur = first_; + + while (cur) { + if (cur->key == key && cur->action != NoOp) res = cur; + cur = cur->next; + } + + if (!res || res->action == Reset) return 0; + return res; + } + + bool Config::have(ParmStr key) const + { + PosibErr<const KeyInfo *> pe = keyinfo(key); + if (pe.has_err()) {pe.ignore_err(); return false;} + return lookup(pe.data->name); + } + + PosibErr<String> Config::retrieve(ParmStr key) const + { + RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki); + if (ki->type == KeyInfoList) return make_err(key_not_string, ki->name); + + const Entry * cur = lookup(ki->name); + + return cur ? cur->value : get_default(ki); + } + + PosibErr<String> Config::retrieve_any(ParmStr key) const + { + RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki); + + if (ki->type != KeyInfoList) { + const Entry * cur = lookup(ki->name); + return cur ? cur->value : get_default(ki); + } else { + StringList sl; + RET_ON_ERR(retrieve_list(key, &sl)); + StringListEnumeration els = sl.elements_obj(); + const char * s; + String val; + while ( (s = els.next()) != 0 ) { + val += s; + val += '\n'; + } + val.pop_back(); + return val; + } + } + + PosibErr<bool> Config::retrieve_bool(ParmStr key) const + { + RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki); + if (ki->type != KeyInfoBool) return make_err(key_not_bool, ki->name); + + const Entry * cur = lookup(ki->name); + + String value(cur ? cur->value : get_default(ki)); + + if (value == "false") return false; + else return true; + } + + PosibErr<int> Config::retrieve_int(ParmStr key) const + { + assert(committed_); // otherwise the value may not be an integer + // as it has not been verified. + + RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki); + if (ki->type != KeyInfoInt) return make_err(key_not_int, ki->name); + + const Entry * cur = lookup(ki->name); + + String value(cur ? cur->value : get_default(ki)); + + return atoi(value.str()); + } + + void Config::lookup_list(const KeyInfo * ki, + MutableContainer & m, + bool include_default) const + { + const Entry * cur = first_; + const Entry * first_to_use = 0; + + while (cur) { + if (cur->key == ki->name && + (first_to_use == 0 || + cur->action == Reset || cur->action == Set + || cur->action == ListClear)) + first_to_use = cur; + cur = cur->next; + } + + cur = first_to_use; + + if (include_default && + (!cur || + !(cur->action == Set || cur->action == ListClear))) + { + String def = get_default(ki); + separate_list(def, m, true); + } + + if (cur && cur->action == Reset) { + cur = cur->next; + } + + if (cur && cur->action == Set) { + if (!include_default) m.clear(); + m.add(cur->value); + cur = cur->next; + } + + if (cur && cur->action == ListClear) { + if (!include_default) m.clear(); + cur = cur->next; + } + + while (cur) { + if (cur->key == ki->name) { + if (cur->action == ListAdd) + m.add(cur->value); + else if (cur->action == ListRemove) + m.remove(cur->value); + } + cur = cur->next; + } + } + + PosibErr<void> Config::retrieve_list(ParmStr key, + MutableContainer * m) const + { + RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki); + if (ki->type != KeyInfoList) return make_err(key_not_list, ki->name); + + lookup_list(ki, *m, true); + + return no_err; + } + + static const KeyInfo * find(ParmStr key, + const KeyInfo * i, + const KeyInfo * end) + { + while (i != end) { + if (strcmp(key, i->name) == 0) + return i; + ++i; + } + return i; + } + + static const ConfigModule * find(ParmStr key, + const ConfigModule * i, + const ConfigModule * end) + { + while (i != end) { + if (strcmp(key, i->name) == 0) + return i; + ++i; + } + return i; + } + + PosibErr<const KeyInfo *> Config::keyinfo(ParmStr key) const + { + typedef PosibErr<const KeyInfo *> Ret; + { + const KeyInfo * i; + i = acommon::find(key, keyinfo_begin, keyinfo_end); + if (i != keyinfo_end) return Ret(i); + + i = acommon::find(key, extra_begin, extra_end); + if (i != extra_end) return Ret(i); + + const char * s = strncmp(key, "f-", 2) == 0 ? key + 2 : key.str(); + const char * h = strchr(s, '-'); + if (h == 0) goto err; + + String k(s, h - s); + const ConfigModule * j = acommon::find(k, + filter_modules.pbegin(), + filter_modules.pend()); + + if (j == filter_modules.pend() && load_filter_hook && committed_) { + // FIXME: This isn't quite right + PosibErrBase pe = load_filter_hook(const_cast<Config *>(this), k); + pe.ignore_err(); + j = acommon::find(k, + filter_modules.pbegin(), + filter_modules.pend()); + } + + if (j == filter_modules.pend()) goto err; + + i = acommon::find(key, j->begin, j->end); + if (i != j->end) return Ret(i); + + if (strncmp(key, "f-", 2) != 0) k = "f-"; + else k = ""; + k += key; + i = acommon::find(k, j->begin, j->end); + if (i != j->end) return Ret(i); + } + err: + return Ret().prim_err(unknown_key, key); + } + + static bool proc_locale_str(ParmStr lang, String & final_str) + { + if (lang == 0) return false; + const char * i = lang; + if (!(asc_islower(i[0]) && asc_islower(i[1]))) return false; + final_str.assign(i, 2); + i += 2; + if (! (i[0] == '_' || i[0] == '-')) return true; + i += 1; + if (!(asc_isupper(i[0]) && asc_isupper(i[1]))) return true; + final_str += '_'; + final_str.append(i, 2); + return true; + } + + static void get_lang_env(String & str) + { + if (proc_locale_str(getenv("LC_MESSAGES"), str)) return; + if (proc_locale_str(getenv("LANG"), str)) return; + if (proc_locale_str(getenv("LANGUAGE"), str)) return; + str = DEFAULT_LANG; + } + +#ifdef USE_LOCALE + + static void get_lang(String & final_str) + { + // FIXME: THIS IS NOT THREAD SAFE + String locale = setlocale (LC_ALL, NULL); + if (locale == "C") + setlocale (LC_ALL, ""); + const char * lang = setlocale (LC_MESSAGES, NULL); + bool res = proc_locale_str(lang, final_str); + if (locale == "C") + setlocale(LC_MESSAGES, locale.c_str()); + if (!res) + get_lang_env(final_str); + } + +#else + + static inline void get_lang(String & str) + { + get_lang_env(str); + } + +#endif + +#if defined USE_LOCALE && defined HAVE_LANGINFO_CODESET + + static inline void get_encoding(const Config & c, String & final_str) + { + const char * codeset = nl_langinfo(CODESET); + if (ascii_encoding(c, codeset)) codeset = "none"; + final_str = codeset; + } + +#else + + static inline void get_encoding(const Config &, String & final_str) + { + final_str = "none"; + } + +#endif + + String Config::get_default(const KeyInfo * ki) const + { + bool in_replace = false; + String final_str; + String replace; + const char * i = ki->def; + if (*i == '!') { // special cases + ++i; + + if (strcmp(i, "lang") == 0) { + + const Entry * entry; + if (entry = lookup("actual-lang"), entry) { + return entry->value; + } else if (have("master")) { + final_str = "<unknown>"; + } else { + get_lang(final_str); + } + + } else if (strcmp(i, "encoding") == 0) { + + get_encoding(*this, final_str); + + } else if (strcmp(i, "special") == 0) { + + // do nothing + + } else { + + abort(); // this should not happen + + } + + } else for(; *i; ++i) { + + if (!in_replace) { + + if (*i == '<') { + in_replace = true; + } else { + final_str += *i; + } + + } else { // in_replace + + if (*i == '/' || *i == ':' || *i == '|' || *i == '#' || *i == '^') { + char sep = *i; + String second; + ++i; + while (*i != '\0' && *i != '>') second += *i++; + if (sep == '/') { + String s1 = retrieve(replace); + String s2 = retrieve(second); + final_str += add_possible_dir(s1, s2); + } else if (sep == ':') { + String s1 = retrieve(replace); + final_str += add_possible_dir(s1, second); + } else if (sep == '#') { + String s1 = retrieve(replace); + assert(second.size() == 1); + unsigned int s = 0; + while (s != s1.size() && s1[s] != second[0]) ++s; + final_str.append(s1, s); + } else if (sep == '^') { + String s1 = retrieve(replace); + String s2 = retrieve(second); + final_str += figure_out_dir(s1, s2); + } else { // sep == '|' + assert(replace[0] == '$'); + const char * env = getenv(replace.c_str()+1); + final_str += env ? env : second; + } + replace = ""; + in_replace = false; + + } else if (*i == '>') { + + final_str += retrieve(replace).data; + replace = ""; + in_replace = false; + + } else { + + replace += *i; + + } + + } + + } + return final_str; + } + + PosibErr<String> Config::get_default(ParmStr key) const + { + RET_ON_ERR_SET(keyinfo(key), const KeyInfo *, ki); + return get_default(ki); + } + + + +#define TEST(v,l,a) \ + do { \ + if (len == l && memcmp(s, v, l) == 0) { \ + if (action) *action = a; \ + return c + 1; \ + } \ + } while (false) + + const char * Config::base_name(const char * s, Action * action) + { + if (action) *action = Set; + const char * c = strchr(s, '-'); + if (!c) return s; + unsigned len = c - s; + TEST("reset", 5, Reset); + TEST("enable", 6, Enable); + TEST("dont", 4, Disable); + TEST("disable", 7, Disable); + TEST("lset", 4, ListSet); + TEST("rem", 3, ListRemove); + TEST("remove", 6, ListRemove); + TEST("add", 3, ListAdd); + TEST("clear", 5, ListClear); + return s; + } + +#undef TEST + + void separate_list(ParmStr value, AddableContainer & out, bool do_unescape) + { + unsigned len = value.size(); + + VARARRAY(char, buf, len + 1); + memcpy(buf, value, len + 1); + + len = strlen(buf); + char * s = buf; + char * end = buf + len; + + while (s < end) + { + if (do_unescape) while (*s == ' ' || *s == '\t') ++s; + char * b = s; + char * e = s; + while (*s != '\0') { + if (do_unescape && *s == '\\') { + ++s; + if (*s == '\0') break; + e = s; + ++s; + } else { + if (*s == ':') break; + if (!do_unescape || (*s != ' ' && *s != '\t')) e = s; + ++s; + } + } + if (s != b) { + ++e; + *e = '\0'; + if (do_unescape) unescape(b); + + out.add(b); + } + ++s; + } + } + + void combine_list(String & res, const StringList & in) + { + res.clear(); + StringListEnumeration els = in.elements_obj(); + const char * s = 0; + while ( (s = els.next()) != 0) + { + for (; *s; ++s) { + if (*s == ':') + res.append('\\'); + res.append(*s); + } + res.append(':'); + } + if (res.back() == ':') res.pop_back(); + } + + struct ListAddHelper : public AddableContainer + { + Config * config; + Config::Entry * orig_entry; + PosibErr<bool> add(ParmStr val); + }; + + PosibErr<bool> ListAddHelper::add(ParmStr val) + { + Config::Entry * entry = new Config::Entry(*orig_entry); + entry->value = val; + entry->action = Config::ListAdd; + config->set(entry); + return true; + } + + void Config::replace_internal(ParmStr key, ParmStr value) + { + Entry * entry = new Entry; + entry->key = key; + entry->value = value; + entry->action = Set; + entry->next = *insert_point_; + *insert_point_ = entry; + insert_point_ = &entry->next; + } + + PosibErr<void> Config::replace(ParmStr key, ParmStr value) + { + Entry * entry = new Entry; + entry->key = key; + entry->value = value; + return set(entry); + } + + PosibErr<void> Config::remove(ParmStr key) + { + Entry * entry = new Entry; + entry->key = key; + entry->action = Reset; + return set(entry); + } + + PosibErr<void> Config::set(Entry * entry0, bool do_unescape) + { + StackPtr<Entry> entry(entry0); + + if (entry->action == NoOp) + entry->key = base_name(entry->key.str(), &entry->action); + + if (num_parms(entry->action) == 0 && !entry->value.empty()) + { + if (entry->place_holder == -1) { + switch (entry->action) { + case Reset: + return make_err(no_value_reset, entry->key); + case Enable: + return make_err(no_value_enable, entry->key); + case Disable: + return make_err(no_value_disable, entry->key); + case ListClear: + return make_err(no_value_clear, entry->key); + default: + abort(); // this shouldn't happen + } + } else { + entry->place_holder = -1; + } + } + + if (entry->action != ListSet) { + + switch (entry->action) { + case Enable: + entry->value = "true"; + entry->action = Set; + break; + case Disable: + entry->value = "false"; + entry->action = Set; + break; + default: + ; + } + if (do_unescape) unescape(entry->value.mstr()); + + entry->next = *insert_point_; + *insert_point_ = entry; + insert_point_ = &entry->next; + entry.release(); + if (committed_) RET_ON_ERR(commit(entry0)); // entry0 == entry + + } else { // action == ListSet + + Entry * ent = new Entry; + ent->key = entry->key; + ent->action = ListClear; + set(ent); + + ListAddHelper helper; + helper.config = this; + helper.orig_entry = entry; + + separate_list(entry->value.str(), helper, do_unescape); + } + return no_err; + } + + PosibErr<void> Config::merge(const Config & other) + { + const Entry * src = other.first_; + while (src) + { + Entry * entry = new Entry(*src); + entry->next = *insert_point_; + *insert_point_ = entry; + insert_point_ = &entry->next; + if (committed_) RET_ON_ERR(commit(entry)); + src = src->next; + } + return no_err; + } + + void Config::lang_config_merge(const Config & other, + int which, ParmStr data_encoding) + { + Conv to_utf8; + to_utf8.setup(*this, data_encoding, "utf-8", NormTo); + const Entry * src = other.first_; + Entry * * ip = &first_; + while (src) + { + const KeyInfo * l_ki = other.keyinfo(src->key); + if (l_ki->other_data == which) { + const KeyInfo * c_ki = keyinfo(src->key); + Entry * entry = new Entry(*src); + if (c_ki->flags & KEYINFO_UTF8) + entry->value = to_utf8(entry->value); + entry->next = *ip; + *ip = entry; + ip = &entry->next; + } + src = src->next; + } + } + + +#define NOTIFY_ALL(fun) \ + do { \ + Vector<Notifier *>::iterator i = notifier_list.begin(); \ + Vector<Notifier *>::iterator end = notifier_list.end(); \ + while (i != end) { \ + RET_ON_ERR((*i)->fun); \ + ++i; \ + } \ + } while (false) + + PosibErr<int> Config::commit(Entry * entry, Conv * conv) + { + PosibErr<const KeyInfo *> pe = keyinfo(entry->key); + { + if (pe.has_err()) goto error; + + const KeyInfo * ki = pe; + + entry->key = ki->name; + + // FIXME: This is the correct thing to do but it causes problems + // with changing a filter mode in "pipe" mode and probably + // elsewhere. + //if (attached_ && !(ki->flags & KEYINFO_MAY_CHANGE)) { + // pe = make_err(cant_change_value, entry->key); + // goto error; + //} + + int place_holder = entry->place_holder; + + if (conv && ki->flags & KEYINFO_UTF8) + entry->value = (*conv)(entry->value); + + if (ki->type != KeyInfoList && list_action(entry->action)) { + pe = make_err(key_not_list, entry->key); + goto error; + } + + assert(ki->def != 0); // if null this key should never have values + // directly added to it + String value(entry->action == Reset ? get_default(ki) : entry->value); + + switch (ki->type) { + + case KeyInfoBool: { + + bool val; + + if (value.empty() || entry->place_holder != -1) { + // if entry->place_holder != -1 than IGNORE the value no + // matter what it is + entry->value = "true"; + val = true; + place_holder = -1; + } else if (value == "true") { + val = true; + } else if (value == "false") { + val = false; + } else { + pe = make_err(bad_value, entry->key, value, + /* TRANSLATORS: "true" and "false" are literal + * values and should not be translated.*/ + _("either \"true\" or \"false\"")); + goto error; + } + + NOTIFY_ALL(item_updated(ki, val)); + break; + + } case KeyInfoString: + + NOTIFY_ALL(item_updated(ki, value)); + break; + + case KeyInfoInt: + { + int num; + + if (sscanf(value.str(), "%i", &num) == 1 && num >= 0) { + NOTIFY_ALL(item_updated(ki, num)); + } else { + pe = make_err(bad_value, entry->key, value, _("a positive integer")); + goto error; + } + + break; + } + case KeyInfoList: + + NOTIFY_ALL(list_updated(ki)); + break; + + } + return place_holder; + } + error: + entry->action = NoOp; + if (!entry->file.empty()) + return pe.with_file(entry->file, entry->line_num); + else + return (PosibErrBase &)pe; + } + +#undef NOTIFY_ALL + + + ///////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////// + + class PossibleElementsEmul : public KeyInfoEnumeration + { + private: + bool include_extra; + bool include_modules; + bool module_changed; + const Config * cd; + const KeyInfo * i; + const ConfigModule * m; + public: + PossibleElementsEmul(const Config * d, bool ic, bool im) + : include_extra(ic), include_modules(im), + module_changed(false), cd(d), i(d->keyinfo_begin), m(0) {} + + KeyInfoEnumeration * clone() const { + return new PossibleElementsEmul(*this); + } + + void assign(const KeyInfoEnumeration * other) { + *this = *(const PossibleElementsEmul *)(other); + } + + virtual bool active_filter_module_changed(void) { + return module_changed; + } + + const char * active_filter_module_name(void){ + if (m != 0) + return m->name; + return ""; + } + + virtual const char * active_filter_module_desc(void) { + if (m != 0) + return m->desc; + return ""; + } + + const KeyInfo * next() { + if (i == cd->keyinfo_end) { + if (include_extra) + i = cd->extra_begin; + else + i = cd->extra_end; + } + + module_changed = false; + if (i == cd->extra_end) { + m = cd->filter_modules.pbegin(); + if (!include_modules || m == cd->filter_modules.pend()) return 0; + else { + i = m->begin; + module_changed = true; + } + } + + if (m == 0){ + return i++; + } + + if (m == cd->filter_modules.pend()){ + return 0; + } + + while (i == m->end) { + ++m; + if (m == cd->filter_modules.pend()) return 0; + else { + i = m->begin; + module_changed = true; + } + } + + return i++; + } + + bool at_end() const { + return (m == cd->filter_modules.pend()); + } + }; + + KeyInfoEnumeration * + Config::possible_elements(bool include_extra, bool include_modules) const + { + return new PossibleElementsEmul(this, include_extra, include_modules); + } + + struct ListDefaultDump : public AddableContainer + { + OStream & out; + bool first; + const char * first_prefix; + unsigned num_blanks; + ListDefaultDump(OStream & o); + PosibErr<bool> add(ParmStr d); + }; + + ListDefaultDump::ListDefaultDump(OStream & o) + : out(o), first(false) + { + first_prefix = _("# default: "); + num_blanks = strlen(first_prefix - 1); + } + + PosibErr<bool> ListDefaultDump::add(ParmStr d) + { + if (first) { + out.write(first_prefix); + } else { + out.put('#'); + for (unsigned i = 0; i != num_blanks; ++i) + out.put(' '); + } + VARARRAY(char, buf, d.size() * 2 + 1); + escape(buf, d); + out.printl(buf); + first = false; + return true; + } + + class ListDump : public MutableContainer + { + OStream & out; + const char * name; + public: + ListDump(OStream & o, ParmStr n) + : out(o), name(n) {} + PosibErr<bool> add(ParmStr d); + PosibErr<bool> remove(ParmStr d); + PosibErr<void> clear(); + }; + + PosibErr<bool> ListDump::add(ParmStr d) { + VARARRAY(char, buf, d.size() * 2 + 1); + escape(buf, d); + out.printf("add-%s %s\n", name, buf); + return true; + } + PosibErr<bool> ListDump::remove(ParmStr d) { + VARARRAY(char, buf, d.size() * 2 + 1); + escape(buf, d); + out.printf("remove-%s %s\n", name, buf); + return true; + } + PosibErr<void> ListDump::clear() { + out.printf("clear-%s\n", name); + return no_err; + } + + void Config::write_to_stream(OStream & out, + bool include_extra) + { + KeyInfoEnumeration * els = possible_elements(include_extra); + const KeyInfo * i; + String buf; + String obuf; + String def; + bool have_value; + + while ((i = els->next()) != 0) { + if (i->desc == 0) continue; + + if (els->active_filter_module_changed()) { + out.printf(_("\n" + "#######################################################################\n" + "#\n" + "# Filter: %s\n" + "# %s\n" + "#\n" + "# configured as follows:\n" + "\n"), + els->active_filter_module_name(), + _(els->active_filter_module_desc())); + } + + obuf.clear(); + have_value = false; + + obuf.printf("# %s (%s)\n# %s\n", + i->name, _(keyinfo_type_name[i->type]), _(i->desc)); + if (i->def != 0) { + if (i->type != KeyInfoList) { + buf.resize(strlen(i->def) * 2 + 1); + escape(buf.data(), i->def); + obuf.printf("# default: %s", buf.data()); + def = get_default(i); + if (def != i->def) { + buf.resize(def.size() * 2 + 1); + escape(buf.data(), def.str()); + obuf.printf(" = %s", buf.data()); + } + obuf << '\n'; + const Entry * entry = lookup(i->name); + if (entry) { + have_value = true; + buf.resize(entry->value.size() * 2 + 1); + escape(buf.data(), entry->value.str()); + obuf.printf("%s %s\n", i->name, buf.data()); + } + } else { + unsigned s = obuf.size(); + ListDump ld(obuf, i->name); + lookup_list(i, ld, false); + have_value = s != obuf.size(); + } + } + obuf << '\n'; + if (!(i->flags & KEYINFO_HIDDEN) || have_value) + out.write(obuf); + } + delete els; + } + + PosibErr<void> Config::read_in(IStream & in, ParmStr id) + { + String buf; + DataPair dp; + while (getdata_pair(in, dp, buf)) { + to_lower(dp.key); + Entry * entry = new Entry; + entry->key = dp.key; + entry->value = dp.value; + entry->file = id; + entry->line_num = dp.line_num; + RET_ON_ERR(set(entry, true)); + } + return no_err; + } + + PosibErr<void> Config::read_in_file(ParmStr file) { + FStream in; + RET_ON_ERR(in.open(file, "r")); + return read_in(in, file); + } + + PosibErr<void> Config::read_in_string(ParmStr str, const char * what) { + StringIStream in(str); + return read_in(in, what); + } + + + PosibErr<bool> Config::read_in_settings(const Config * other) + { + if (settings_read_in_) return false; + + bool was_committed = committed_; + set_committed_state(false); + + if (other && other->settings_read_in_) { + + assert(empty()); + del(); // to clean up any notifiers and similar stuff + copy(*other); + + } else { + + if (other) merge(*other); + + const char * env = getenv("ASPELL_CONF"); + if (env != 0) { + insert_point_ = &first_; + RET_ON_ERR(read_in_string(env, _("ASPELL_CONF env var"))); + } + + { + insert_point_ = &first_; + PosibErrBase pe = read_in_file(retrieve("per-conf-path")); + if (pe.has_err() && !pe.has_err(cant_read_file)) return pe; + } + + { + insert_point_ = &first_; + PosibErrBase pe = read_in_file(retrieve("conf-path")); + if (pe.has_err() && !pe.has_err(cant_read_file)) return pe; + } + + if (was_committed) + RET_ON_ERR(commit_all()); + + settings_read_in_ = true; + } + + return true; + } + + PosibErr<void> Config::commit_all(Vector<int> * phs, const char * codeset) + { + committed_ = true; + others_ = first_; + first_ = 0; + insert_point_ = &first_; + Conv to_utf8; + if (codeset) + RET_ON_ERR(to_utf8.setup(*this, codeset, "utf-8", NormTo)); + while (others_) { + *insert_point_ = others_; + others_ = others_->next; + (*insert_point_)->next = 0; + RET_ON_ERR_SET(commit(*insert_point_, codeset ? &to_utf8 : 0), int, place_holder); + if (phs && place_holder != -1 && (phs->empty() || phs->back() != place_holder)) + phs->push_back(place_holder); + insert_point_ = &((*insert_point_)->next); + } + return no_err; + } + + PosibErr<void> Config::set_committed_state(bool val) { + if (val && !committed_) { + RET_ON_ERR(commit_all()); + } else if (!val && committed_) { + assert(empty()); + committed_ = false; + } + return no_err; + } + + +#ifdef ENABLE_WIN32_RELOCATABLE +# define HOME_DIR "<prefix>" +# define PERSONAL "<lang>.pws" +# define REPL "<lang>.prepl" +#else +# define HOME_DIR "<$HOME|./>" +# define PERSONAL ".aspell.<lang>.pws" +# define REPL ".aspell.<lang>.prepl" +#endif + + static const KeyInfo config_keys[] = { + // the description should be under 50 chars + {"actual-dict-dir", KeyInfoString, "<dict-dir^master>", 0} + , {"actual-lang", KeyInfoString, "", 0} + , {"conf", KeyInfoString, "aspell.conf", + /* TRANSLATORS: The remaing strings in config.cpp should be kept + under 50 characters, begin with a lower case character and not + include any trailing punctuation marks. */ + N_("main configuration file")} + , {"conf-dir", KeyInfoString, CONF_DIR, + N_("location of main configuration file")} + , {"conf-path", KeyInfoString, "<conf-dir/conf>", 0} + , {"data-dir", KeyInfoString, DATA_DIR, + N_("location of language data files")} + , {"dict-alias", KeyInfoList, "", + N_("create dictionary aliases")} + , {"dict-dir", KeyInfoString, DICT_DIR, + N_("location of the main word list")} + , {"encoding", KeyInfoString, "!encoding", + N_("encoding to expect data to be in"), KEYINFO_COMMON} + , {"filter", KeyInfoList , "url", + N_("add or removes a filter"), KEYINFO_MAY_CHANGE} + , {"filter-path", KeyInfoList, DICT_DIR, + N_("path(s) aspell looks for filters")} + //, {"option-path", KeyInfoList, DATA_DIR, + // N_("path(s) aspell looks for options descriptions")} + , {"mode", KeyInfoString, "url", + N_("filter mode"), KEYINFO_COMMON} + , {"extra-dicts", KeyInfoList, "", + N_("extra dictionaries to use")} + , {"home-dir", KeyInfoString, HOME_DIR, + N_("location for personal files")} + , {"ignore", KeyInfoInt , "1", + N_("ignore words <= n chars"), KEYINFO_MAY_CHANGE} + , {"ignore-accents" , KeyInfoBool, "false", + /* TRANSLATORS: It is OK if this is longer than 50 chars */ + N_("ignore accents when checking words -- CURRENTLY IGNORED"), KEYINFO_MAY_CHANGE | KEYINFO_HIDDEN} + , {"ignore-case", KeyInfoBool , "false", + N_("ignore case when checking words"), KEYINFO_MAY_CHANGE} + , {"ignore-repl", KeyInfoBool , "false", + N_("ignore commands to store replacement pairs"), KEYINFO_MAY_CHANGE} + , {"jargon", KeyInfoString, "", + N_("extra information for the word list"), KEYINFO_HIDDEN} + , {"keyboard", KeyInfoString, "standard", + N_("keyboard definition to use for typo analysis")} + , {"lang", KeyInfoString, "<language-tag>", + N_("language code"), KEYINFO_COMMON} + , {"language-tag", KeyInfoString, "!lang", + N_("deprecated, use lang instead"), KEYINFO_HIDDEN} + , {"local-data-dir", KeyInfoString, "<actual-dict-dir>", + N_("location of local language data files") } + , {"master", KeyInfoString, "<lang>", + N_("base name of the main dictionary to use"), KEYINFO_COMMON} + , {"master-flags", KeyInfoString, "", 0} + , {"master-path", KeyInfoString, "<dict-dir/master>", 0} + , {"module", KeyInfoString, "default", + N_("set module name"), KEYINFO_HIDDEN} + , {"module-search-order", KeyInfoList, "", + N_("search order for modules"), KEYINFO_HIDDEN} + , {"normalize", KeyInfoBool, "true", + N_("enable Unicode normalization")} + , {"norm-required", KeyInfoBool, "false", + N_("Unicode normalization required for current lang")} + , {"norm-form", KeyInfoString, "nfc", + /* TRANSLATORS: the values after the ':' are literal + values and should not be translated. */ + N_("Unicode normalization form: none, nfd, nfc, comp")} + , {"norm-strict", KeyInfoBool, "false", + N_("avoid lossy conversions when normalization")} + , {"per-conf", KeyInfoString, ".aspell.conf", + N_("personal configuration file")} + , {"per-conf-path", KeyInfoString, "<home-dir/per-conf>", 0} + , {"personal", KeyInfoString, PERSONAL, + N_("personal dictionary file name")} + , {"personal-path", KeyInfoString, "<home-dir/personal>", 0} + , {"prefix", KeyInfoString, PREFIX, + N_("prefix directory")} + , {"repl", KeyInfoString, REPL, + N_("replacements list file name") } + , {"repl-path", KeyInfoString, "<home-dir/repl>", 0} + , {"run-together", KeyInfoBool, "false", + N_("consider run-together words legal"), KEYINFO_MAY_CHANGE} + , {"run-together-limit", KeyInfoInt, "2", + N_("maximum number that can be strung together"), KEYINFO_MAY_CHANGE} + , {"run-together-min", KeyInfoInt, "3", + N_("minimal length of interior words"), KEYINFO_MAY_CHANGE} + , {"save-repl", KeyInfoBool , "true", + N_("save replacement pairs on save all")} + , {"set-prefix", KeyInfoBool, "true", + N_("set the prefix based on executable location")} + , {"size", KeyInfoString, "+60", + N_("size of the word list")} + , {"spelling", KeyInfoString, "", + N_("no longer used"), KEYINFO_HIDDEN} + , {"sug-mode", KeyInfoString, "normal", + N_("suggestion mode"), KEYINFO_MAY_CHANGE | KEYINFO_COMMON} + , {"sug-edit-dist", KeyInfoInt, "1", + /* TRANSLATORS: "sug-mode" is a literal value and should not be + translated. */ + N_("edit distance to use, override sug-mode default")} + , {"sug-typo-analysis", KeyInfoBool, "true", + N_("use typo analysis, override sug-mode default")} + , {"sug-repl-table", KeyInfoBool, "true", + N_("use replacement tables, override sug-mode default")} + , {"sug-split-char", KeyInfoList, "\\ :-", + N_("characters to insert when a word is split"), KEYINFO_UTF8} + , {"use-other-dicts", KeyInfoBool, "true", + N_("use personal, replacement & session dictionaries")} + , {"variety", KeyInfoList, "", + N_("extra information for the word list")} + , {"word-list-path", KeyInfoList, DATA_DIR, + N_("search path for word list information files"), KEYINFO_HIDDEN} + , {"warn", KeyInfoBool, "true", + N_("enable warnings")} + + + // + // These options are generally used when creating dictionaries + // and may also be specified in the language data file + // + + , {"affix-char", KeyInfoString, "/", // FIXME: Implement + /* TRANSLATORS: It is OK if this is longer than 50 chars */ + N_("indicator for affix flags in word lists -- CURRENTLY IGNORED"), KEYINFO_UTF8 | KEYINFO_HIDDEN} + , {"affix-compress", KeyInfoBool, "false", + N_("use affix compression when creating dictionaries")} + , {"clean-affixes", KeyInfoBool, "true", + N_("remove invalid affix flags")} + , {"clean-words", KeyInfoBool, "false", + N_("attempts to clean words so that they are valid")} + , {"invisible-soundslike", KeyInfoBool, "false", + N_("compute soundslike on demand rather than storing")} + , {"partially-expand", KeyInfoBool, "false", + N_("partially expand affixes for better suggestions")} + , {"skip-invalid-words", KeyInfoBool, "true", + N_("skip invalid words")} + , {"validate-affixes", KeyInfoBool, "true", + N_("check if affix flags are valid")} + , {"validate-words", KeyInfoBool, "true", + N_("check if words are valid")} + + // + // These options are specific to the "aspell" utility. They are + // here so that they can be specified in configuration files. + // + , {"backup", KeyInfoBool, "true", + N_("create a backup file by appending \".bak\"")} + , {"byte-offsets", KeyInfoBool, "false", + N_("use byte offsets instead of character offsets")} + , {"guess", KeyInfoBool, "false", + N_("create missing root/affix combinations"), KEYINFO_MAY_CHANGE} + , {"keymapping", KeyInfoString, "aspell", + N_("keymapping for check mode: \"aspell\" or \"ispell\"")} + , {"reverse", KeyInfoBool, "false", + N_("reverse the order of the suggest list")} + , {"suggest", KeyInfoBool, "true", + N_("suggest possible replacements"), KEYINFO_MAY_CHANGE} + , {"time" , KeyInfoBool, "false", + N_("time load time and suggest time in pipe mode"), KEYINFO_MAY_CHANGE} + }; + + const KeyInfo * config_impl_keys_begin = config_keys; + const KeyInfo * config_impl_keys_end + = config_keys + sizeof(config_keys)/sizeof(KeyInfo); + + Config * new_basic_config() { + aspell_gettext_init(); + return new Config("aspell", + config_impl_keys_begin, + config_impl_keys_end); + } + +} + diff --git a/jni/common/config.hpp b/jni/common/config.hpp new file mode 100644 index 0000000..d2f0101 --- /dev/null +++ b/jni/common/config.hpp @@ -0,0 +1,281 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_CONFIG___HPP +#define ASPELL_CONFIG___HPP + +#include "can_have_error.hpp" +#include "key_info.hpp" +#include "posib_err.hpp" +#include "string.hpp" +#include "vector.hpp" + +namespace acommon { + + class OStream; + class KeyInfoEnumeration; + class StringPairEnumeration; + class MutableContainer; + class Cacheable; + struct Conv; + + // The Config class is used to hold configuration information. + // it has a set of keys which it will except. Inserting or even + // trying to look at a key that it does not know will produce + // an error. Extra accepted keys can be added with the set_extra + // method. + + // Keys taged with KEYINFO_UTF8 are expected to be in UTF-8 format. + // Keys with file/dir names may contain 8-bit characters and must + // remain untranslated + // All other keys are expected to only contain ASCII characters. + + class Config; + + struct ConfigModule { + const char * name; + const char * file; // path of shared object or dll + const char * desc; // description of module + const KeyInfo * begin; + const KeyInfo * end; + }; + + class Notifier { + public: + // returns a copy if a copy should be made otherwise returns null + virtual Notifier * clone(Config *) const {return 0;} + virtual ~Notifier() {} + + virtual PosibErr<void> item_updated(const KeyInfo *, bool) {return no_err;} + virtual PosibErr<void> item_updated(const KeyInfo *, int) {return no_err;} + virtual PosibErr<void> item_updated(const KeyInfo *, ParmStr) {return no_err;} + virtual PosibErr<void> list_updated(const KeyInfo *) {return no_err;} + }; + + class PossibleElementsEmul; + class NotifierEnumeration; + class GetLine; + class MDInfoListofLists; + + static const bool REPLACE = true; + static const bool INSERT = false; + + // prefixes + // + // reset - resets a value to the default + // + // enable - sets a boolean value to true + // dont, disable - sets a boolean value to false + // -- setting a boolean value to an empty string is the same as setting + // it to true + // + // lset - sets a list, items seperated by ':' + // rem, remove - removes item from a list + // add - add an item to a list + // clear - removes all items from a list + // -- setting a list item directly, ie with out a prefix, is the same as + // setting it to a single value + + class Config : public CanHaveError { + // copy and destructor provided + friend class MDInfoListofLists; + + public: + enum Action {NoOp, Set, Reset, Enable, Disable, + ListSet, ListAdd, ListRemove, ListClear}; + + struct Entry { + Entry * next; + String key; + String value; + String file; + unsigned line_num; + Action action; + bool need_conv; + short place_holder; + Entry() : line_num(0), action(NoOp), + need_conv(false), place_holder(-1) {} + }; + + private: + static const int num_parms_[9]; + + public: + static inline bool list_action(Action a) {return (int)a >= (int)ListAdd; } + static inline int num_parms(Action a) {return num_parms_[a];} + + private: + String name_; + + Entry * first_; + Entry * * insert_point_; + Entry * others_; + + bool committed_; + bool attached_; // if attached can't copy + Vector<Notifier *> notifier_list; + + friend class PossibleElementsEmul; + + const KeyInfo * keyinfo_begin; + const KeyInfo * keyinfo_end; + const KeyInfo * extra_begin; + const KeyInfo * extra_end; + + int md_info_list_index; + + void copy(const Config & other); + void del(); + + PosibErr<int> commit(Entry * entry, Conv * conv = 0); + + bool settings_read_in_; + + public: + + // the first + // if the second parameter is set than flaged options will be + // converted to utf-8 if needed + PosibErr<void> commit_all(Vector<int> * = 0, const char * codeset = 0); + + PosibErr<void> replace(ParmStr, ParmStr); + PosibErr<void> remove(ParmStr); + + bool empty() const {return !first_;} + + PosibErr<void> merge(const Config & other); + + void lang_config_merge(const Config & other, + int which, ParmStr codeset); + + bool settings_read_in() {return settings_read_in_;} + + PosibErr<void> set_committed_state(bool val); + + const Entry * lookup(const char * key) const; + void lookup_list(const KeyInfo * ki, MutableContainer & m, + bool include_default) const; + + String temp_str; + + PosibErr<const ConfigModule *> (* load_filter_hook)(Config * config, ParmStr value); + Notifier * filter_mode_notifier; + + Vector<ConfigModule> filter_modules; + Vector<Cacheable *> filter_modules_ptrs; + + Config(ParmStr name, + const KeyInfo * mainbegin, + const KeyInfo * mainend); + + Config(const Config &); + ~Config(); + Config & operator= (const Config &); + + bool get_attached() const {return attached_;} + void set_attached(bool a) {attached_ = a;} + + Config * clone() const; + void assign(const Config * other); + + const char * name() const {return name_.c_str();} + + NotifierEnumeration * notifiers() const; + + bool add_notifier ( Notifier *); + bool remove_notifier (const Notifier *); + bool replace_notifier(const Notifier *, Notifier *); + + void set_extra(const KeyInfo * begin, const KeyInfo * end); + + void set_filter_modules(const ConfigModule * modbegin, const ConfigModule * modend); + + static const char * base_name(const char * name, Action * action = 0); + + PosibErr<const KeyInfo *> keyinfo(ParmStr key) const; + + KeyInfoEnumeration * possible_elements(bool include_extra = true, + bool include_modules = true) const; + + StringPairEnumeration * elements() {return 0;} // FIXME + + String get_default(const KeyInfo * ki) const; + PosibErr<String> get_default(ParmStr) const; + + PosibErr<String> retrieve(ParmStr key) const; + + // will also retrive a list, with one value per line + PosibErr<String> retrieve_any(ParmStr key) const; + + bool have (ParmStr key) const; + + PosibErr<void> retrieve_list (ParmStr key, MutableContainer *) const; + PosibErr<bool> retrieve_bool (ParmStr key) const; + PosibErr<int> retrieve_int (ParmStr key) const; + + // will take ownership of entry, even if there is an error + PosibErr<void> set(Entry * entry, bool do_unescape = false); + + void replace_internal (ParmStr, ParmStr); + + void write_to_stream(OStream & out, bool include_extra = false); + + PosibErr<bool> read_in_settings(const Config * = 0); + + PosibErr<void> read_in(IStream & in, ParmStr id = ""); + PosibErr<void> read_in_file(ParmStr file); + PosibErr<void> read_in_string(ParmStr str, const char * what = ""); + }; + + Config * new_config(); + Config * new_basic_config(); // config which doesn't require any + // external symbols + + class NotifierEnumeration { + // no copy and destructor needed + Vector<Notifier *>::const_iterator i; + Vector<Notifier *>::const_iterator end; + public: + NotifierEnumeration(const Vector<Notifier *> & b) + : i(b.begin()), end(b.end()) {} + const Notifier * next() { + const Notifier * temp = *i; + if (i != end) + ++i; + return temp; + } + bool at_end() const {return i == end;} + }; + + class KeyInfoEnumeration { + public: + typedef const KeyInfo * Value; + virtual KeyInfoEnumeration * clone() const = 0; + virtual void assign(const KeyInfoEnumeration *) = 0; + virtual bool at_end() const = 0; + virtual const KeyInfo * next() = 0; + virtual const char * active_filter_module_name(void) = 0; + virtual const char * active_filter_module_desc(void) = 0; + virtual bool active_filter_module_changed(void) = 0; + virtual ~KeyInfoEnumeration() {} + }; + + static const unsigned KEYINFO_MAY_CHANGE = 1 << 0; + static const unsigned KEYINFO_UTF8 = 1 << 1; + static const unsigned KEYINFO_HIDDEN = 1 << 2; + static const unsigned KEYINFO_COMMON = 1 << 4; + + class AddableContainer; + class StringList; + + void separate_list(ParmStr value, AddableContainer & out, bool do_unescape = true); + void combine_list(String & res, const StringList &); + + +} + +#endif + diff --git a/jni/common/config.lo b/jni/common/config.lo new file mode 100644 index 0000000..cbb91f3 --- /dev/null +++ b/jni/common/config.lo @@ -0,0 +1,12 @@ +# common/config.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/config.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/convert.cpp b/jni/common/convert.cpp new file mode 100644 index 0000000..2bbd8e0 --- /dev/null +++ b/jni/common/convert.cpp @@ -0,0 +1,1095 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include <assert.h> +#include <string.h> +#include <math.h> + +#include "asc_ctype.hpp" +#include "convert.hpp" +#include "fstream.hpp" +#include "getdata.hpp" +#include "config.hpp" +#include "errors.hpp" +#include "stack_ptr.hpp" +#include "cache-t.hpp" +#include "file_util.hpp" +#include "file_data_util.hpp" +#include "vararray.hpp" + +#include "iostream.hpp" + +#include "gettext.h" + +namespace acommon { + + typedef unsigned char byte; + typedef unsigned char Uni8; + typedef unsigned short Uni16; + typedef unsigned int Uni32; + + + ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + // + // Lookups + // + ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////// + // + // ToUniLookup + // + + class ToUniLookup + { + Uni32 data[256]; + static const Uni32 npos = (Uni32)(-1); + public: + void reset(); + Uni32 operator[] (char key) const {return data[(unsigned char)key];} + bool have(char key) const {return data[(unsigned char)key] != npos;} + bool insert(char key, Uni32 value); + }; + + void ToUniLookup::reset() + { + for (int i = 0; i != 256; ++i) + data[i] = npos; + } + + bool ToUniLookup::insert(char key, Uni32 value) + { + if (data[(unsigned char)key] != npos) + return false; + data[(unsigned char)key] = value; + return true; + } + + ////////////////////////////////////////////////////////////////////// + // + // FromUniLookup + // + + // Assumes that the maximum number of items in the table is 256 + // Also assumes (unsigned char)i == i % 256 + + // Based on the iso-8859-* character sets it is very fast, almost all + // lookups involving no more than 2 comparisons. + // NO looks ups involded more than 3 compassions. + // Also, no division (or modules) is done whatsoever. + + + struct UniItem { + Uni32 key; + char value; + }; + + class FromUniLookup + { + private: + static const Uni32 npos = (Uni32)(-1); + UniItem * overflow_end; + + UniItem data[256*4]; + + UniItem overflow[256]; // you can never be too careful; + + public: + FromUniLookup() {} + void reset(); + inline char operator() (Uni32 key, char unknown = '?') const; + bool insert(Uni32 key, char value); + }; + + void FromUniLookup::reset() + { + for (unsigned i = 0; i != 256*4; ++i) + data[i].key = npos; + overflow_end = overflow; + } + + inline char FromUniLookup::operator() (Uni32 k, char unknown) const + { + const UniItem * i = data + (unsigned char)k * 4; + + if (i->key == k) return i->value; + ++i; + if (i->key == k) return i->value; + ++i; + if (i->key == k) return i->value; + ++i; + if (i->key == k) return i->value; + + if (i->key == npos) return unknown; + + for(i = overflow; i != overflow_end; ++i) + if (i->key == k) return i->value; + + return unknown; + } + + bool FromUniLookup::insert(Uni32 k, char v) + { + UniItem * i = data + (unsigned char)k * 4; + UniItem * e = i + 4; + while (i != e && i->key != npos) { + if (i->key == k) + return false; + ++i; + } + if (i == e) { + for(i = overflow; i != overflow_end; ++i) + if (i->key == k) return false; + } + i->key = k; + i->value = v; + return true; + } + + ////////////////////////////////////////////////////////////////////// + // + // CharLookup + // + + class CharLookup + { + private: + int data[256]; + public: + void reset(); + char operator[] (char key) const {return data[(unsigned char)key];} + bool insert(char key, char value); + }; + + void CharLookup::reset() { + for (int i = 0; i != 256; ++i) + data[i] = -1; + } + + bool CharLookup::insert(char key, char value) + { + if (data[(unsigned char)key] != -1) + return false; + data[(unsigned char)key] = value; + return true; + } + + ////////////////////////////////////////////////////////////////////// + // + // NormLookup + // + + template <class T> + struct NormTable + { + static const unsigned struct_size; + unsigned mask; + unsigned height; + unsigned width; + unsigned size; + T * end; + T data[1]; // hack for data[] + }; + + template <class T> + const unsigned NormTable<T>::struct_size = sizeof(NormTable<T>) - 1; + + template <class T, class From> + struct NormLookupRet + { + const typename T::To * to; + const From * last; + NormLookupRet(const typename T::To * t, From * l) + : to(t), last(l) {} + }; + + template <class T, class From> + static inline NormLookupRet<T,From> norm_lookup(const NormTable<T> * d, + From * s, From * stop, + const typename T::To * def, + From * prev) + { + loop: + if (s != stop) { + const T * i = d->data + (static_cast<typename T::From>(*s) & d->mask); + for (;;) { + if (i->from == static_cast<typename T::From>(*s)) { + if (i->sub_table) { + // really tail recursion + if (i->to[1] != T::to_non_char) {def = i->to; prev = s;} + d = (const NormTable<T> *)(i->sub_table); + s++; + goto loop; + } else { + return NormLookupRet<T,From>(i->to, s); + } + } else { + i += d->height; + if (i >= d->end) break; + } + } + } + return NormLookupRet<T,From>(def, prev); + } + + template <class T> + void free_norm_table(NormTable<T> * d) + { + for (T * cur = d->data; cur != d->end; ++cur) { + if (cur->sub_table) + free_norm_table<T>(static_cast<NormTable<T> *>(cur->sub_table)); + } + free(d); + } + + struct FromUniNormEntry + { + typedef Uni32 From; + Uni32 from; + typedef byte To; + byte to[4]; + static const From from_non_char = (From)(-1); + static const To to_non_char = 0x10; + static const unsigned max_to = 4; + void * sub_table; + } +#ifdef __GNUC__ + __attribute__ ((aligned (16))) +#endif + ; + + struct ToUniNormEntry + { + typedef byte From; + byte from; + typedef Uni16 To; + Uni16 to[3]; + static const From from_non_char = 0x10; + static const To to_non_char = 0x10; + static const unsigned max_to = 3; + void * sub_table; + } +#ifdef __GNUC__ + __attribute__ ((aligned (16))) +#endif + ; + + ////////////////////////////////////////////////////////////////////// + // + // read in char data + // + + PosibErr<void> read_in_char_data (const Config & config, + ParmStr encoding, + ToUniLookup & to, + FromUniLookup & from) + { + to.reset(); + from.reset(); + + String dir1,dir2,file_name; + fill_data_dir(&config, dir1, dir2); + find_file(file_name,dir1,dir2,encoding,".cset"); + + FStream data; + PosibErrBase err = data.open(file_name, "r"); + if (err.get_err()) { + char mesg[300]; + snprintf(mesg, 300, _("This could also mean that the file \"%s\" could not be opened for reading or does not exist."), + file_name.c_str()); + return make_err(unknown_encoding, encoding, mesg); + } + unsigned chr; + Uni32 uni; + String line; + char * p; + do { + p = get_nb_line(data, line); + } while (*p != '/'); + for (chr = 0; chr != 256; ++chr) { + p = get_nb_line(data, line); + if (strtoul(p, 0, 16) != chr) + return make_err(bad_file_format, file_name); + uni = strtoul(p + 3, 0, 16); + to.insert(chr, uni); + from.insert(uni, chr); + } + + return no_err; + } + + ////////////////////////////////////////////////////////////////////// + // + // read in norm data + // + + struct Tally + { + int size; + Uni32 mask; + int max; + int * data; + Tally(int s, int * d) : size(s), mask(s - 1), max(0), data(d) { + memset(data, 0, sizeof(int)*size); + } + void add(Uni32 chr) { + Uni32 p = chr & mask; + data[p]++; + if (data[p] > max) max = data[p]; + } + }; + + template <class T> + static PosibErr< NormTable<T> * > create_norm_table(IStream & in, String & buf) + { + const char * p = get_nb_line(in, buf); + assert(*p == 'N'); + ++p; + int size = strtoul(p, (char **)&p, 10); + VARARRAY(T, d, size); + memset(d, 0, sizeof(T) * size); + int sz = 1 << (unsigned)floor(log(size <= 1 ? 1.0 : size - 1)/log(2.0)); + VARARRAY(int, tally0_d, sz); Tally tally0(sz, tally0_d); + VARARRAY(int, tally1_d, sz*2); Tally tally1(sz*2, tally1_d); + VARARRAY(int, tally2_d, sz*4); Tally tally2(sz*4, tally2_d); + T * cur = d; + while (p = get_nb_line(in, buf), *p != '.') { + Uni32 f = strtoul(p, (char **)&p, 16); + cur->from = static_cast<typename T::From>(f); + assert(f == cur->from); + tally0.add(f); + tally1.add(f); + tally2.add(f); + ++p; + assert(*p == '>'); + ++p; + assert(*p == ' '); + ++p; + unsigned i = 0; + if (*p != '-') { + for (;; ++i) { + const char * q = p; + Uni32 t = strtoul(p, (char **)&p, 16); + if (q == p) break; + assert(i < d->max_to); + cur->to[i] = static_cast<typename T::To>(t); + assert(t == static_cast<Uni32>(cur->to[i])); + } + } else { + cur->to[0] = 0; + cur->to[1] = T::to_non_char; + } + if (*p == ' ') ++p; + if (*p == '/') cur->sub_table = create_norm_table<T>(in,buf); + ++cur; + } + assert(cur - d == size); + Tally * which = &tally0; + if (which->max > tally1.max) which = &tally1; + if (which->max > tally2.max) which = &tally2; + NormTable<T> * final = (NormTable<T> *)calloc(1, NormTable<T>::struct_size + + sizeof(T) * which->size * which->max); + memset(final, 0, NormTable<T>::struct_size + sizeof(T) * which->size * which->max); + final->mask = which->size - 1; + final->height = which->size; + final->width = which->max; + final->end = final->data + which->size * which->max; + final->size = size; + for (cur = d; cur != d + size; ++cur) { + T * dest = final->data + (cur->from & final->mask); + while (dest->from != 0) dest += final->height; + *dest = *cur; + if (dest->from == 0) dest->from = T::from_non_char; + } + for (T * dest = final->data; dest < final->end; dest += final->height) { + if (dest->from == 0 || (dest->from == T::from_non_char && dest->to[0] == 0)) { + dest->from = T::from_non_char; + dest->to[0] = T::to_non_char; + } + } + return final; + } + + PosibErr<NormTables *> NormTables::get_new(const String & encoding, + const Config * config) + { + String dir1,dir2,file_name; + fill_data_dir(config, dir1, dir2); + find_file(file_name,dir1,dir2,encoding,".cmap"); + + FStream in; + PosibErrBase err = in.open(file_name, "r"); + if (err.get_err()) { + char mesg[300]; + snprintf(mesg, 300, _("This could also mean that the file \"%s\" could not be opened for reading or does not exist."), + file_name.c_str()); + return make_err(unknown_encoding, encoding, mesg); // FIXME + } + + NormTables * d = new NormTables; + d->key = encoding; + String l; + get_nb_line(in, l); + remove_comments(l); + assert (l == "INTERNAL"); + get_nb_line(in, l); + remove_comments(l); + assert (l == "/"); + d->internal = create_norm_table<FromUniNormEntry>(in, l); + get_nb_line(in, l); + remove_comments(l); + assert (l == "STRICT"); + char * p = get_nb_line(in, l); + remove_comments(l); + if (l == "/") { + d->strict_d = create_norm_table<FromUniNormEntry>(in, l); + d->strict = d->strict_d; + } else { + assert(*p == '='); + ++p; ++p; + assert(strcmp(p, "INTERNAL") == 0); + d->strict = d->internal; + } + while (get_nb_line(in, l)) { + remove_comments(l); + d->to_uni.push_back(ToUniTable()); + ToUniTable & e = d->to_uni.back(); + e.name.resize(l.size()); + for (unsigned i = 0; i != l.size(); ++i) + e.name[i] = asc_tolower(l[i]); + char * p = get_nb_line(in, l); + remove_comments(l); + if (l == "/") { + e.ptr = e.data = create_norm_table<ToUniNormEntry>(in,l); + } else { + assert(*p == '='); + ++p; ++p; + for (char * q = p; *q; ++q) *q = asc_tolower(*q); + Vector<ToUniTable>::iterator i = d->to_uni.begin(); + while (i->name != p && i != d->to_uni.end()) ++i; + assert(i != d->to_uni.end()); + e.ptr = i->ptr; + get_nb_line(in, l); + } + } + return d; + } + + NormTables::~NormTables() + { + free_norm_table<FromUniNormEntry>(internal); + if (strict_d) + free_norm_table<FromUniNormEntry>(strict_d); + for (unsigned i = 0; i != to_uni.size(); ++i) { + if (to_uni[i].data) + free_norm_table<ToUniNormEntry>(to_uni[i].data); + } + } + + ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + // + // Convert + // + ////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////// + + + bool operator== (const Convert & rhs, const Convert & lhs) + { + return strcmp(rhs.in_code(), lhs.in_code()) == 0 + && strcmp(rhs.out_code(), lhs.out_code()) == 0; + } + + ////////////////////////////////////////////////////////////////////// + // + // Trivial Conversion + // + + template <typename Chr> + struct DecodeDirect : public Decode + { + void decode(const char * in0, int size, FilterCharVector & out) const { + const Chr * in = reinterpret_cast<const Chr *>(in0); + if (size == -1) { + for (;*in; ++in) + out.append(*in); + } else { + const Chr * stop = reinterpret_cast<const Chr *>(in0 +size); + for (;in != stop; ++in) + out.append(*in); + } + } + PosibErr<void> decode_ec(const char * in0, int size, + FilterCharVector & out, ParmStr) const { + DecodeDirect::decode(in0, size, out); + return no_err; + } + }; + + template <typename Chr> + struct EncodeDirect : public Encode + { + void encode(const FilterChar * in, const FilterChar * stop, + CharVector & out) const { + for (; in != stop; ++in) { + Chr c = in->chr; + if (c != in->chr) c = '?'; + out.append(&c, sizeof(Chr)); + } + } + PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, + CharVector & out, ParmStr orig) const { + for (; in != stop; ++in) { + Chr c = in->chr; + if (c != in->chr) { + char m[70]; + snprintf(m, 70, _("The Unicode code point U+%04X is unsupported."), in->chr); + return make_err(invalid_string, orig, m); + } + out.append(&c, sizeof(Chr)); + } + return no_err; + } + bool encode(FilterChar * &, FilterChar * &, FilterCharVector &) const { + return true; + } + }; + + template <typename Chr> + struct ConvDirect : public DirectConv + { + void convert(const char * in0, int size, CharVector & out) const { + if (size == -1) { + const Chr * in = reinterpret_cast<const Chr *>(in0); + for (;*in != 0; ++in) + out.append(in, sizeof(Chr)); + } else { + out.append(in0, size); + } + } + PosibErr<void> convert_ec(const char * in0, int size, + CharVector & out, ParmStr) const { + ConvDirect::convert(in0, size, out); + return no_err; + } + }; + + ////////////////////////////////////////////////////////////////////// + // + // Lookup Conversion + // + + struct DecodeLookup : public Decode + { + ToUniLookup lookup; + PosibErr<void> init(ParmStr code, const Config & c) { + FromUniLookup unused; + return read_in_char_data(c, code, lookup, unused); + } + void decode(const char * in, int size, FilterCharVector & out) const { + if (size == -1) { + for (;*in; ++in) + out.append(lookup[*in]); + } else { + const char * stop = in + size; + for (;in != stop; ++in) + out.append(lookup[*in]); + } + } + PosibErr<void> decode_ec(const char * in, int size, + FilterCharVector & out, ParmStr) const { + DecodeLookup::decode(in, size, out); + return no_err; + } + }; + + struct DecodeNormLookup : public Decode + { + typedef ToUniNormEntry E; + NormTable<E> * data; + DecodeNormLookup(NormTable<E> * d) : data(d) {} + // must be null terminated + // FIXME: Why must it be null terminated? + void decode(const char * in, int size, FilterCharVector & out) const { + const char * stop = in + size; // will word even if size -1 + while (in != stop) { + if (*in == 0) { + if (size == -1) break; + out.append(0); + ++in; + } else { + NormLookupRet<E,const char> ret = norm_lookup<E>(data, in, stop, 0, in); + for (unsigned i = 0; ret.to[i] && i < E::max_to; ++i) + out.append(ret.to[i]); + in = ret.last + 1; + } + } + } + PosibErr<void> decode_ec(const char * in, int size, + FilterCharVector & out, ParmStr) const { + DecodeNormLookup::decode(in, size, out); + return no_err; + } + }; + + struct EncodeLookup : public Encode + { + FromUniLookup lookup; + PosibErr<void> init(ParmStr code, const Config & c) + {ToUniLookup unused; + return read_in_char_data(c, code, unused, lookup);} + void encode(const FilterChar * in, const FilterChar * stop, + CharVector & out) const { + for (; in != stop; ++in) { + out.append(lookup(*in)); + } + } + PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, + CharVector & out, ParmStr orig) const { + for (; in != stop; ++in) { + char c = lookup(*in, '\0'); + if (c == '\0' && in->chr != 0) { + char m[70]; + snprintf(m, 70, _("The Unicode code point U+%04X is unsupported."), in->chr); + return make_err(invalid_string, orig, m); + } + out.append(c); + } + return no_err; + } + bool encode(FilterChar * & in0, FilterChar * & stop, + FilterCharVector & out) const { + FilterChar * in = in0; + for (; in != stop; ++in) + *in = lookup(*in); + return true; + } + }; + + struct EncodeNormLookup : public Encode + { + typedef FromUniNormEntry E; + NormTable<E> * data; + EncodeNormLookup(NormTable<E> * d) : data(d) {} + // *stop must equal 0 + void encode(const FilterChar * in, const FilterChar * stop, + CharVector & out) const { + while (in < stop) { + if (*in == 0) { + out.append('\0'); + ++in; + } else { + NormLookupRet<E,const FilterChar> ret = norm_lookup<E>(data, in, stop, (const byte *)"?", in); + for (unsigned i = 0; i < E::max_to && ret.to[i]; ++i) + out.append(ret.to[i]); + in = ret.last + 1; + } + } + } + PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, + CharVector & out, ParmStr orig) const { + while (in < stop) { + if (*in == 0) { + out.append('\0'); + ++in; + } else { + NormLookupRet<E,const FilterChar> ret = norm_lookup<E>(data, in, stop, 0, in); + if (ret.to == 0) { + char m[70]; + snprintf(m, 70, _("The Unicode code point U+%04X is unsupported."), in->chr); + return make_err(invalid_string, orig, m); + } + for (unsigned i = 0; i < E::max_to && ret.to[i]; ++i) + out.append(ret.to[i]); + in = ret.last + 1; + } + } + return no_err; + } + bool encode(FilterChar * & in, FilterChar * & stop, + FilterCharVector & buf) const { + buf.clear(); + while (in < stop) { + if (*in == 0) { + buf.append(FilterChar(0)); + ++in; + } else { + NormLookupRet<E,FilterChar> ret = norm_lookup<E>(data, in, stop, (const byte *)"?", in); + const FilterChar * end = ret.last + 1; + unsigned width = 0; + for (; in != end; ++in) width += in->width; + buf.append(FilterChar(ret.to[0], width)); + for (unsigned i = 1; i < E::max_to && ret.to[i]; ++i) { + buf.append(FilterChar(ret.to[i],0)); + } + } + } + buf.append(0); + in = buf.pbegin(); + stop = buf.pend(); + return true; + } + }; + + ////////////////////////////////////////////////////////////////////// + // + // UTF8 + // + +#define get_check_next \ + if (in == stop) goto error; \ + c = *in; \ + if ((c & 0xC0) != 0x80) goto error; \ + ++in; \ + u <<= 6; \ + u |= c & 0x3F; \ + ++w; + + static inline FilterChar from_utf8 (const char * & in, const char * stop, + Uni32 err_char = '?') + { + Uni32 u = (Uni32)(-1); + FilterChar::Width w = 1; + + // the first char is guaranteed not to be off the end + char c = *in; + ++in; + + while (in != stop && (c & 0xC0) == 0x80) {c = *in; ++in; ++w;} + if ((c & 0x80) == 0x00) { // 1-byte wide + u = c; + } else if ((c & 0xE0) == 0xC0) { // 2-byte wide + u = c & 0x1F; + get_check_next; + } else if ((c & 0xF0) == 0xE0) { // 3-byte wide + u = c & 0x0F; + get_check_next; + get_check_next; + } else if ((c & 0xF8) == 0xF0) { // 4-byte wide + u = c & 0x07; + get_check_next; + get_check_next; + get_check_next; + } else { + goto error; + } + + return FilterChar(u, w); + error: + return FilterChar(err_char, w); + } + + static inline void to_utf8 (FilterChar in, CharVector & out) + { + FilterChar::Chr c = in; + + if (c < 0x80) { + out.append(c); + } + else if (c < 0x800) { + out.append(0xC0 | (c>>6)); + out.append(0x80 | (c & 0x3F)); + } + else if (c < 0x10000) { + out.append(0xE0 | (c>>12)); + out.append(0x80 | (c>>6 & 0x3F)); + out.append(0x80 | (c & 0x3F)); + } + else if (c < 0x200000) { + out.append(0xF0 | (c>>18)); + out.append(0x80 | (c>>12 & 0x3F)); + out.append(0x80 | (c>>6 & 0x3F)); + out.append(0x80 | (c & 0x3F)); + } + } + + struct DecodeUtf8 : public Decode + { + ToUniLookup lookup; + void decode(const char * in, int size, FilterCharVector & out) const { + const char * stop = in + size; // this is OK even if size == -1 + while (*in && in != stop) { + out.append(from_utf8(in, stop)); + } + } + PosibErr<void> decode_ec(const char * in, int size, + FilterCharVector & out, ParmStr orig) const { + const char * begin = in; + const char * stop = in + size; // this is OK even if size == -1 + while (*in && in != stop) { + FilterChar c = from_utf8(in, stop, (Uni32)-1); + if (c == (Uni32)-1) { + char m[70]; + snprintf(m, 70, _("Invalid UTF-8 sequence at position %ld."), (long)(in - begin)); + return make_err(invalid_string, orig, m); + } + out.append(c); + } + return no_err; + } + }; + + struct EncodeUtf8 : public Encode + { + FromUniLookup lookup; + void encode(const FilterChar * in, const FilterChar * stop, + CharVector & out) const { + for (; in != stop; ++in) { + to_utf8(*in, out); + } + } + PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, + CharVector & out, ParmStr) const { + for (; in != stop; ++in) { + to_utf8(*in, out); + } + return no_err; + } + }; + + ////////////////////////////////////////////////////////////////////// + // + // Cache + // + + static GlobalCache<Decode> decode_cache("decode"); + static GlobalCache<Encode> encode_cache("encode"); + static GlobalCache<NormTables> norm_tables_cache("norm_tables"); + + ////////////////////////////////////////////////////////////////////// + // + // new_aspell_convert + // + + void Convert::generic_convert(const char * in, int size, CharVector & out) + { + buf_.clear(); + decode_->decode(in, size, buf_); + FilterChar * start = buf_.pbegin(); + FilterChar * stop = buf_.pend(); + if (!filter.empty()) + filter.process(start, stop); + encode_->encode(start, stop, out); + } + + const char * fix_encoding_str(ParmStr enc, String & buf) + { + buf.clear(); + buf.reserve(enc.size() + 1); + for (size_t i = 0; i != enc.size(); ++i) + buf.push_back(asc_tolower(enc[i])); + + if (strncmp(buf.c_str(), "iso8859", 7) == 0) + buf.insert(buf.begin() + 3, '-'); // For backwards compatibility + + if (buf == "ascii" || buf == "ansi_x3.4-1968") + return "iso-8859-1"; + else if (buf == "machine unsigned 16" || buf == "utf-16") + return "ucs-2"; + else if (buf == "machine unsigned 32" || buf == "utf-32") + return "ucs-4"; + else + return buf.c_str(); + } + + bool ascii_encoding(const Config & c, ParmStr enc0) + { + if (enc0.empty()) return true; + if (enc0 == "ANSI_X3.4-1968" + || enc0 == "ASCII" || enc0 == "ascii") return true; + String buf; + const char * enc = fix_encoding_str(enc0, buf); + if (strcmp(enc, "utf-8") == 0 + || strcmp(enc, "ucs-2") == 0 + || strcmp(enc, "ucs-4") == 0) return false; + String dir1,dir2,file_name; + fill_data_dir(&c, dir1, dir2); + file_name << dir1 << enc << ".cset"; + if (file_exists(file_name)) return false; + if (dir1 == dir2) return true; + file_name.clear(); + file_name << dir2 << enc << ".cset"; + return !file_exists(file_name); + } + + PosibErr<Convert *> internal_new_convert(const Config & c, + ParmString in, + ParmString out, + bool if_needed, + Normalize norm) + { + String in_s; + in = fix_encoding_str(in, in_s); + + String out_s; + out = fix_encoding_str(out, out_s); + + if (if_needed && in == out) return 0; + + StackPtr<Convert> conv(new Convert); + switch (norm) { + case NormNone: + RET_ON_ERR(conv->init(c, in, out)); break; + case NormFrom: + RET_ON_ERR(conv->init_norm_from(c, in, out)); break; + case NormTo: + RET_ON_ERR(conv->init_norm_to(c, in, out)); break; + } + return conv.release(); + } + + PosibErr<Decode *> Decode::get_new(const String & key, const Config * c) + { + StackPtr<Decode> ptr; + if (key == "iso-8859-1") + ptr.reset(new DecodeDirect<Uni8>); + else if (key == "ucs-2") + ptr.reset(new DecodeDirect<Uni16>); + else if (key == "ucs-4") + ptr.reset(new DecodeDirect<Uni32>); + else if (key == "utf-8") + ptr.reset(new DecodeUtf8); + else + ptr.reset(new DecodeLookup); + RET_ON_ERR(ptr->init(key, *c)); + ptr->key = key; + return ptr.release(); + } + + PosibErr<Encode *> Encode::get_new(const String & key, const Config * c) + { + StackPtr<Encode> ptr; + if (key == "iso-8859-1") + ptr.reset(new EncodeDirect<Uni8>); + else if (key == "ucs-2") + ptr.reset(new EncodeDirect<Uni16>); + else if (key == "ucs-4") + ptr.reset(new EncodeDirect<Uni32>); + else if (key == "utf-8") + ptr.reset(new EncodeUtf8); + else + ptr.reset(new EncodeLookup); + RET_ON_ERR(ptr->init(key, *c)); + ptr->key = key; + return ptr.release(); + } + + Convert::~Convert() {} + + PosibErr<void> Convert::init(const Config & c, ParmStr in, ParmStr out) + { + RET_ON_ERR(setup(decode_c, &decode_cache, &c, in)); + decode_ = decode_c.get(); + RET_ON_ERR(setup(encode_c, &encode_cache, &c, out)); + encode_ = encode_c.get(); + + conv_ = 0; + if (in == out) { + if (in == "ucs-2") { + conv_ = new ConvDirect<Uni16>; + } else if (in == "ucs-4") { + conv_ = new ConvDirect<Uni32>; + } else { + conv_ = new ConvDirect<char>; + } + } + + if (conv_) + RET_ON_ERR(conv_->init(decode_, encode_, c)); + + return no_err; + } + + + PosibErr<void> Convert::init_norm_from(const Config & c, ParmStr in, ParmStr out) + { + if (!c.retrieve_bool("normalize") && !c.retrieve_bool("norm-required")) + return init(c,in,out); + + RET_ON_ERR(setup(norm_tables_, &norm_tables_cache, &c, out)); + + RET_ON_ERR(setup(decode_c, &decode_cache, &c, in)); + decode_ = decode_c.get(); + + if (c.retrieve_bool("norm-strict")) { + encode_s = new EncodeNormLookup(norm_tables_->strict); + encode_ = encode_s; + encode_->key = out; + encode_->key += ":strict"; + } else { + encode_s = new EncodeNormLookup(norm_tables_->internal); + encode_ = encode_s; + encode_->key = out; + encode_->key += ":internal"; + } + conv_ = 0; + + return no_err; + } + + PosibErr<void> Convert::init_norm_to(const Config & c, ParmStr in, ParmStr out) + { + String norm_form = c.retrieve("norm-form"); + if ((!c.retrieve_bool("normalize") || norm_form == "none") + && !c.retrieve_bool("norm-required")) + return init(c,in,out); + if (norm_form == "none" && c.retrieve_bool("norm-required")) + norm_form = "nfc"; + + RET_ON_ERR(setup(norm_tables_, &norm_tables_cache, &c, in)); + + RET_ON_ERR(setup(encode_c, &encode_cache, &c, out)); + encode_ = encode_c.get(); + + NormTables::ToUni::const_iterator i = norm_tables_->to_uni.begin(); + for (; i != norm_tables_->to_uni.end() && i->name != norm_form; ++i); + assert(i != norm_tables_->to_uni.end()); + + decode_s = new DecodeNormLookup(i->ptr); + decode_ = decode_s; + decode_->key = in; + decode_->key += ':'; + decode_->key += i->name; + + conv_ = 0; + + return no_err; + } + + PosibErr<void> MBLen::setup(const Config &, ParmStr enc0) + { + String buf; + const char * enc = fix_encoding_str(enc0,buf); + if (strcmp(enc, "utf-8") == 0) encoding = UTF8; + else if (strcmp(enc, "ucs-2") == 0) encoding = UCS2; + else if (strcmp(enc, "ucs-4") == 0) encoding = UCS4; + else encoding = Other; + return no_err; + } + + unsigned MBLen::operator()(const char * str, const char * stop) + { + unsigned size = 0; + switch (encoding) { + case Other: + return stop - str; + case UTF8: + for (; str != stop; ++str) { + if ((*str & 0x80) == 0 || (*str & 0xC0) == 0xC0) ++size; + } + return size; + case UCS2: + return (stop - str)/2; + case UCS4: + return (stop - str)/4; + } + return 0; + } + +} diff --git a/jni/common/convert.hpp b/jni/common/convert.hpp new file mode 100644 index 0000000..76332ee --- /dev/null +++ b/jni/common/convert.hpp @@ -0,0 +1,417 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_CONVERT__HPP +#define ASPELL_CONVERT__HPP + +#include "string.hpp" +#include "posib_err.hpp" +#include "char_vector.hpp" +#include "filter_char.hpp" +#include "filter_char_vector.hpp" +#include "stack_ptr.hpp" +#include "filter.hpp" +#include "cache.hpp" + +namespace acommon { + + class OStream; + class Config; + + struct ConvBase : public Cacheable { + typedef const Config CacheConfig; + typedef const char * CacheKey; + String key; + bool cache_key_eq(const char * l) const {return key == l;} + ConvBase() {} + private: + ConvBase(const ConvBase &); + void operator=(const ConvBase &); + }; + + struct Decode : public ConvBase { + virtual PosibErr<void> init(ParmStr code, const Config &) {return no_err;} + virtual void decode(const char * in, int size, + FilterCharVector & out) const = 0; + virtual PosibErr<void> decode_ec(const char * in, int size, + FilterCharVector & out, ParmStr orig) const = 0; + static PosibErr<Decode *> get_new(const String &, const Config *); + virtual ~Decode() {} + }; + struct Encode : public ConvBase { + // null characters should be treated like any other character + // by the encoder. + virtual PosibErr<void> init(ParmStr, const Config &) {return no_err;} + virtual void encode(const FilterChar * in, const FilterChar * stop, + CharVector & out) const = 0; + virtual PosibErr<void> encode_ec(const FilterChar * in, const FilterChar * stop, + CharVector & out, ParmStr orig) const = 0; + // may convert inplace + virtual bool encode(FilterChar * & in, FilterChar * & stop, + FilterCharVector & buf) const {return false;} + static PosibErr<Encode *> get_new(const String &, const Config *); + virtual ~Encode() {} + }; + struct DirectConv { // convert directly from in_code to out_code. + // should not take ownership of decode and encode. + // decode and encode guaranteed to stick around for the life + // of the object. + virtual PosibErr<void> init(const Decode *, const Encode *, + const Config &) {return no_err;} + virtual void convert(const char * in, int size, + CharVector & out) const = 0; + virtual PosibErr<void> convert_ec(const char * in, int size, + CharVector & out, ParmStr orig) const = 0; + virtual ~DirectConv() {} + }; + template <class T> struct NormTable; + struct FromUniNormEntry; + struct ToUniNormEntry; + struct NormTables : public Cacheable { + typedef const Config CacheConfig; + typedef const char * CacheKey; + String key; + bool cache_key_eq(const char * l) const {return key == l;} + static PosibErr<NormTables *> get_new(const String &, const Config *); + NormTable<FromUniNormEntry> * internal; + NormTable<FromUniNormEntry> * strict_d; + NormTable<FromUniNormEntry> * strict; + struct ToUniTable { + String name; + NormTable<ToUniNormEntry> * data; + NormTable<ToUniNormEntry> * ptr; + ToUniTable() : data(), ptr() {} + }; + typedef Vector<ToUniTable> ToUni; + Vector<ToUniTable> to_uni; + ~NormTables(); + }; + + typedef FilterCharVector ConvertBuffer; + + class Convert { + private: + CachePtr<Decode> decode_c; + StackPtr<Decode> decode_s; + Decode * decode_; + CachePtr<Encode> encode_c; + StackPtr<Encode> encode_s; + Encode * encode_; + CachePtr<NormTables> norm_tables_; + StackPtr<DirectConv> conv_; + + ConvertBuffer buf_; + + static const unsigned int null_len_ = 4; // POSIB FIXME: Be more precise + + Convert(const Convert &); + void operator=(const Convert &); + + public: + Convert() {} + ~Convert(); + + // This filter is used when the convert method is called. It must + // be set up by an external entity as this class does not set up + // this class in any way. + Filter filter; + + PosibErr<void> init(const Config &, ParmStr in, ParmStr out); + PosibErr<void> init_norm_to(const Config &, ParmStr in, ParmStr out); + PosibErr<void> init_norm_from(const Config &, ParmStr in, ParmStr out); + + const char * in_code() const {return decode_->key.c_str();} + const char * out_code() const {return encode_->key.c_str();} + + void append_null(CharVector & out) const + { + const char nul[4] = {0,0,0,0}; // 4 should be enough + out.write(nul, null_len_); + } + + unsigned int null_len() const {return null_len_;} + + // this filters will generally not translate null characters + // if you need a null character at the end, add it yourself + // with append_null + + void decode(const char * in, int size, FilterCharVector & out) const + {decode_->decode(in,size,out);} + + void encode(const FilterChar * in, const FilterChar * stop, + CharVector & out) const + {encode_->encode(in,stop,out);} + + bool encode(FilterChar * & in, FilterChar * & stop, + FilterCharVector & buf) const + {return encode_->encode(in,stop,buf);} + + // does NOT pass it through filters + // DOES NOT use an internal state + void convert(const char * in, int size, CharVector & out, ConvertBuffer & buf) const + { + if (conv_) { + conv_->convert(in,size,out); + } else { + buf.clear(); + decode_->decode(in, size, buf); + encode_->encode(buf.pbegin(), buf.pend(), out); + } + } + + // does NOT pass it through filters + // DOES NOT use an internal state + PosibErr<void> convert_ec(const char * in, int size, CharVector & out, + ConvertBuffer & buf, ParmStr orig) const + { + if (conv_) { + RET_ON_ERR(conv_->convert_ec(in,size,out, orig)); + } else { + buf.clear(); + RET_ON_ERR(decode_->decode_ec(in, size, buf, orig)); + RET_ON_ERR(encode_->encode_ec(buf.pbegin(), buf.pend(), + out, orig)); + } + return no_err; + } + + + // convert has the potential to use internal buffers and + // is therefore not const. It is also not thread safe + // and I have no intention to make it thus. + + void convert(const char * in, int size, CharVector & out) { + if (filter.empty()) { + convert(in,size,out,buf_); + } else { + generic_convert(in,size,out); + } + } + + void generic_convert(const char * in, int size, CharVector & out); + + }; + + bool operator== (const Convert & rhs, const Convert & lhs); + + const char * fix_encoding_str(ParmStr enc, String & buf); + + // also returns true if the encoding is unknown + bool ascii_encoding(const Config & c, ParmStr enc0); + + enum Normalize {NormNone, NormFrom, NormTo}; + + PosibErr<Convert *> internal_new_convert(const Config & c, + ParmString in, ParmString out, + bool if_needed, + Normalize n); + + static inline PosibErr<Convert *> new_convert(const Config & c, + ParmStr in, ParmStr out, + Normalize n) + { + return internal_new_convert(c,in,out,false,n); + } + + static inline PosibErr<Convert *> new_convert_if_needed(const Config & c, + ParmStr in, ParmStr out, + Normalize n) + { + return internal_new_convert(c,in,out,true,n); + } + + struct ConvObj { + Convert * ptr; + ConvObj(Convert * c = 0) : ptr(c) {} + ~ConvObj() {delete ptr;} + PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, Normalize norm) + { + delete ptr; + ptr = 0; + PosibErr<Convert *> pe = new_convert_if_needed(c, from, to, norm); + if (pe.has_err()) return pe; + ptr = pe.data; + return no_err; + } + operator const Convert * () const {return ptr;} + private: + ConvObj(const ConvObj &); + void operator=(const ConvObj &); + }; + + struct ConvP { + const Convert * conv; + ConvertBuffer buf0; + CharVector buf; + operator bool() const {return conv;} + ConvP(const Convert * c = 0) : conv(c) {} + ConvP(const ConvObj & c) : conv(c.ptr) {} + ConvP(const ConvP & c) : conv(c.conv) {} + void operator=(const ConvP & c) { conv = c.conv; } + PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, + Normalize norm) + { + delete conv; + conv = 0; + PosibErr<Convert *> pe = new_convert_if_needed(c, from, to, norm); + if (pe.has_err()) return pe; + conv = pe.data; + return no_err; + } + char * operator() (char * str, size_t sz) + { + if (conv) { + buf.clear(); + conv->convert(str, sz, buf, buf0); + return buf.mstr(); + } else { + return str; + } + } + const char * operator() (const char * str, size_t sz) + { + if (conv) { + buf.clear(); + conv->convert(str, sz, buf, buf0); + return buf.str(); + } else { + return str; + } + } + char * operator() (MutableString str) + { + return operator()(str.str, str.size); + } + char * operator() (char * str) + { + if (conv) { + buf.clear(); + conv->convert(str, -1, buf, buf0); + return buf.mstr(); + } else { + return str; + } + } + const char * operator() (ParmStr str) + { + if (conv) { + buf.clear(); + conv->convert(str, -1, buf, buf0); + return buf.mstr(); + } else { + return str; + } + } + char * operator() (char c) + { + buf.clear(); + if (conv) { + char str[2] = {c, 0}; + conv->convert(str, 1, buf, buf0); + } else { + buf.append(c); + } + return buf.mstr(); + } + }; + + struct Conv : public ConvP + { + ConvObj conv_obj; + Conv(Convert * c = 0) : ConvP(c), conv_obj(c) {} + PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, Normalize norm) + { + RET_ON_ERR(conv_obj.setup(c,from,to,norm)); + conv = conv_obj.ptr; + return no_err; + } + }; + + struct ConvECP { + const Convert * conv; + ConvertBuffer buf0; + CharVector buf; + operator bool() const {return conv;} + ConvECP(const Convert * c = 0) : conv(c) {} + ConvECP(const ConvObj & c) : conv(c.ptr) {} + ConvECP(const ConvECP & c) : conv(c.conv) {} + void operator=(const ConvECP & c) { conv = c.conv; } + PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, Normalize norm) + { + delete conv; + conv = 0; + PosibErr<Convert *> pe = new_convert_if_needed(c, from, to, norm); + if (pe.has_err()) return pe; + conv = pe.data; + return no_err; + } + PosibErr<char *> operator() (char * str, size_t sz) + { + if (conv) { + buf.clear(); + RET_ON_ERR(conv->convert_ec(str, sz, buf, buf0, str)); + return buf.mstr(); + } else { + return str; + } + } + PosibErr<char *> operator() (MutableString str) + { + return operator()(str.str, str.size); + } + PosibErr<char *> operator() (char * str) + { + if (conv) { + buf.clear(); + RET_ON_ERR(conv->convert_ec(str, -1, buf, buf0, str)); + return buf.mstr(); + } else { + return str; + } + } + + PosibErr<const char *> operator() (ParmStr str) + { + if (conv) { + buf.clear(); + RET_ON_ERR(conv->convert_ec(str, -1, buf, buf0, str)); + return buf.mstr(); + } else { + return str.str(); + } + } + PosibErr<const char *> operator() (char c) + { + char buf2[2] = {c, 0}; + return operator()(ParmString(buf2,1)); + } + }; + + struct ConvEC : public ConvECP + { + ConvObj conv_obj; + ConvEC(Convert * c = 0) : ConvECP(c), conv_obj(c) {} + PosibErr<void> setup(const Config & c, ParmStr from, ParmStr to, Normalize norm) + { + RET_ON_ERR(conv_obj.setup(c,from,to,norm)); + conv = conv_obj.ptr; + return no_err; + } + }; + + struct MBLen + { + enum Encoding {Other, UTF8, UCS2, UCS4} encoding; + MBLen() : encoding(Other) {} + PosibErr<void> setup(const Config &, ParmStr enc); + unsigned operator()(const char * str, const char * stop); + unsigned operator()(const char * str, unsigned byte_size) { + return operator()(str, str + byte_size);} + }; + +} + +#endif diff --git a/jni/common/convert.lo b/jni/common/convert.lo new file mode 100644 index 0000000..97e1455 --- /dev/null +++ b/jni/common/convert.lo @@ -0,0 +1,12 @@ +# common/convert.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/convert.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/copy_ptr.hpp b/jni/common/copy_ptr.hpp new file mode 100644 index 0000000..f7e2335 --- /dev/null +++ b/jni/common/copy_ptr.hpp @@ -0,0 +1,58 @@ +// Copyright (c) 2001 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef autil__copy_ptr +#define autil__copy_ptr + +#include "generic_copy_ptr-t.hpp" + +namespace acommon { + + template <typename T> + class CopyPtr + { + struct Parms { + T * clone(const T * ptr) const + { return new T(*ptr);} + void assign(T * & rhs, const T * lhs) const + { *rhs = *lhs; } + void del(T * ptr) + { delete ptr; } + + }; + GenericCopyPtr<T, Parms> impl; + + public: + + explicit CopyPtr(T * p = 0) : impl(p) {} + CopyPtr(const CopyPtr & other) : impl(other.impl) {} + + CopyPtr & operator=(const CopyPtr & other) { + impl = other.impl; + return *this; + } + + void assign(const T * other) {impl.assign(other);} + void reset(T * other = 0) {impl.reset(other);} + + T & operator* () const {return *impl;} + T * operator-> () const {return impl;} + T * get() const {return impl;} + operator T * () const {return impl;} + + T * release() {return impl.release();} + }; + +} + +#endif + diff --git a/jni/common/document_checker.cpp b/jni/common/document_checker.cpp new file mode 100644 index 0000000..5e510c4 --- /dev/null +++ b/jni/common/document_checker.cpp @@ -0,0 +1,77 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "document_checker.hpp" +#include "tokenizer.hpp" +#include "convert.hpp" +#include "speller.hpp" +#include "config.hpp" + +namespace acommon { + + DocumentChecker::DocumentChecker() + : status_fun_(0), speller_(0) {} + DocumentChecker::~DocumentChecker() + { + } + + PosibErr<void> DocumentChecker + ::setup(Tokenizer * tokenizer, Speller * speller, Filter * filter) + { + tokenizer_.reset(tokenizer); + filter_.reset(filter); + speller_ = speller; + conv_ = speller->to_internal_; + return no_err; + } + + void DocumentChecker::set_status_fun(void (* sf)(void *, Token, int), + void * d) + { + status_fun_ = sf; + status_fun_data_ = d; + } + + void DocumentChecker::reset() + { + if (filter_) + filter_->reset(); + } + + void DocumentChecker::process(const char * str, int size) + { + proc_str_.clear(); + conv_->decode(str, size, proc_str_); + proc_str_.append(0); + FilterChar * begin = proc_str_.pbegin(); + FilterChar * end = proc_str_.pend() - 1; + if (filter_) + filter_->process(begin, end); + tokenizer_->reset(begin, end); + } + + Token DocumentChecker::next_misspelling() + { + bool correct; + Token tok; + do { + if (!tokenizer_->advance()) { + tok.offset = proc_str_.size(); + tok.len = 0; + return tok; + } + correct = speller_->check(MutableString(tokenizer_->word.data(), + tokenizer_->word.size() - 1)); + tok.len = tokenizer_->end_pos - tokenizer_->begin_pos; + tok.offset = tokenizer_->begin_pos; + if (status_fun_) + (*status_fun_)(status_fun_data_, tok, correct); + } while (correct); + return tok; + } + +} + diff --git a/jni/common/document_checker.hpp b/jni/common/document_checker.hpp new file mode 100644 index 0000000..d35bb88 --- /dev/null +++ b/jni/common/document_checker.hpp @@ -0,0 +1,62 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_DOCUMENT_CHECKER__HPP +#define ASPELL_DOCUMENT_CHECKER__HPP + +#include "filter.hpp" +#include "char_vector.hpp" +#include "copy_ptr.hpp" +#include "can_have_error.hpp" +#include "filter_char.hpp" +#include "filter_char_vector.hpp" + +namespace acommon { + + class Config; + class Speller; + class Tokenizer; + class Convert; + + struct Token { + unsigned int offset; + unsigned int len; + operator bool () const {return len != 0;} + }; + + + class DocumentChecker : public CanHaveError { + public: + // will take ownership of tokenizer and filter (even if there is an error) + // config only used for this method. + // speller expected to stick around. + PosibErr<void> setup(Tokenizer *, Speller *, Filter *); + void reset(); + void process(const char * str, int size); + Token next_misspelling(); + + Filter * filter() {return filter_;} + + void set_status_fun(void (*)(void *, Token, int), void *); + + DocumentChecker(); + ~DocumentChecker(); + + private: + CopyPtr<Filter> filter_; + CopyPtr<Tokenizer> tokenizer_; + void (* status_fun_)(void *, Token, int); + void * status_fun_data_; + Speller * speller_; + Convert * conv_; + FilterCharVector proc_str_; + }; + + PosibErr<DocumentChecker *> new_document_checker(Speller *); + +} + +#endif /* ASPELL_DOCUMENT_CHECKER__HPP */ diff --git a/jni/common/document_checker.lo b/jni/common/document_checker.lo new file mode 100644 index 0000000..d19bc4b --- /dev/null +++ b/jni/common/document_checker.lo @@ -0,0 +1,12 @@ +# common/document_checker.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/document_checker.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/enumeration.hpp b/jni/common/enumeration.hpp new file mode 100644 index 0000000..b540291 --- /dev/null +++ b/jni/common/enumeration.hpp @@ -0,0 +1,123 @@ +// Copyright (c) 2001 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef __autil_enumeration__ +#define __autil_enumeration__ + +#include "clone_ptr-t.hpp" + +// An enumeration is an efficient way to iterate through elements much +// like a forward iterator. The at_end method is a convince method +// as enumerations will return a null pointer or some other sort of +// special end state when they are at the end. +// Unlike an iterator iterating through x elements on a list can be +// done in x function calls while an iterator will require 3*x. +// function calls. +// Example of emulator usage +// const char * word; +// while ( (word = elements->next()) != 0) { // one function call +// cout << word << endl; +// } +// And an iterator +// iterator i = container->begin(); +// iterator end = container->end(); +// while (i != end) { // comparison, one function call +// cout << *i << endl; // deref, total of two function calls +// ++i; // increment, total of three function calls. +// } +// Normally all three calls are inline so it doesn't really matter +// but when the container type is not visible there are not inline +// and probably even virtual. +// If you really love iterators you can very easily wrap an enumeration +// in a forward iterator. + +namespace acommon { + + template <typename Val> + class Enumeration { + public: + typedef Val Value; + typedef Enumeration Base; + virtual Enumeration * clone() const = 0; + virtual void assign(const Enumeration *) = 0; + virtual Value next() = 0; + virtual bool at_end() const = 0; + virtual ~Enumeration() {} + }; + + template <class Parms, class Enum = Enumeration<typename Parms::Value> > + // Parms is expected to have the following members: + // typename Value + // typename Iterator; + // bool endf(Iterator) + // Value end_state() + // Value deref(Iterator) + class MakeEnumeration : public Enum { + public: + typedef typename Parms::Iterator Iterator; + typedef typename Parms::Value Value; + private: + Iterator i_; + Parms parms_; + public: + + MakeEnumeration(const Iterator i, const Parms & p = Parms()) + : i_(i), parms_(p) {} + + Enum * clone() const { + return new MakeEnumeration(*this); + } + + void assign (const Enum * other) { + *this = *static_cast<const MakeEnumeration *>(other); + } + + Value next() { + if (parms_.endf(i_)) + return parms_.end_state(); + Value temp = parms_.deref(i_); + ++i_; + return temp; + } + + bool at_end() const { + return parms_.endf(i_); + } + }; + + template <class Value> + struct MakeAlwaysEndEnumerationParms { + Value end_state() const {return Value();} + }; + + template <class Value> + struct MakeAlwaysEndEnumerationParms<Value *> { + Value * end_state() const {return 0;} + }; + + template <class Value> + class MakeAlwaysEndEnumeration : public Enumeration<Value> { + MakeAlwaysEndEnumerationParms<Value> parms_; + public: + MakeAlwaysEndEnumeration * clone() const { + return new MakeAlwaysEndEnumeration(*this); + } + void assign(const Enumeration<Value> * that) { + *this = *static_cast<const MakeAlwaysEndEnumeration *>(that); + } + Value next() {return parms_.end_state();} + bool at_end() const {return true;} + }; +} + +#endif + diff --git a/jni/common/error.cpp b/jni/common/error.cpp new file mode 100644 index 0000000..78b116a --- /dev/null +++ b/jni/common/error.cpp @@ -0,0 +1,52 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include <string.h> +#include <stdlib.h> + +#include "error.hpp" + +namespace acommon { + + bool Error::is_a(ErrorInfo const * to_find) const + { + const ErrorInfo * e = err; + while (e) { + if (e == to_find) return true; + e = e->isa; + } + return false; + } + + Error::Error(const Error & other) + { + if (other.mesg) { + mesg = (char *)malloc(strlen(other.mesg) + 1); + strcpy(const_cast<char *>(mesg), other.mesg); + } + err = other.err; + } + + Error & Error::operator=(const Error & other) + { + if (mesg) + free(const_cast<char *>(mesg)); + if (other.mesg) { + unsigned int len = strlen(other.mesg) + 1; + mesg = (char *)malloc(len); + memcpy(const_cast<char *>(mesg), other.mesg, len); + } + err = other.err; + return *this; + } + + Error::~Error() + { + if (mesg) + free(const_cast<char *>(mesg)); + } + +} diff --git a/jni/common/error.hpp b/jni/common/error.hpp new file mode 100644 index 0000000..944fbb8 --- /dev/null +++ b/jni/common/error.hpp @@ -0,0 +1,37 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_ERROR__HPP +#define ASPELL_ERROR__HPP + +namespace acommon { + +struct ErrorInfo; + +struct Error { + const char * mesg; // expected to be allocated with malloc + const ErrorInfo * err; + + Error() : mesg(0), err(0) {} + + Error(const Error &); + Error & operator=(const Error &); + ~Error(); + + bool is_a(const ErrorInfo * e) const; +}; + +struct ErrorInfo { + const ErrorInfo * isa; + const char * mesg; + unsigned int num_parms; + const char * parms[3]; +}; + + +} + +#endif /* ASPELL_ERROR__HPP */ diff --git a/jni/common/error.lo b/jni/common/error.lo new file mode 100644 index 0000000..9cf1fa9 --- /dev/null +++ b/jni/common/error.lo @@ -0,0 +1,12 @@ +# common/error.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/error.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/errors.cpp b/jni/common/errors.cpp new file mode 100644 index 0000000..792bbcf --- /dev/null +++ b/jni/common/errors.cpp @@ -0,0 +1,700 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "settings.h" +#include "gettext.h" +#include "error.hpp" +#include "errors.hpp" + +namespace acommon { + + +static const ErrorInfo aerror_other_obj = { + 0, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_other = &aerror_other_obj; + +static const ErrorInfo aerror_operation_not_supported_obj = { + 0, // isa + N_("Operation Not Supported: %what:1"), // mesg + 1, // num_parms + {"what"} // parms +}; +extern "C" const ErrorInfo * const aerror_operation_not_supported = &aerror_operation_not_supported_obj; + +static const ErrorInfo aerror_cant_copy_obj = { + aerror_operation_not_supported, // isa + 0, // mesg + 1, // num_parms + {"what"} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_copy = &aerror_cant_copy_obj; + +static const ErrorInfo aerror_unimplemented_method_obj = { + aerror_operation_not_supported, // isa + N_("The method \"%what:1\" is unimplemented in \"%where:2\"."), // mesg + 2, // num_parms + {"what", "where"} // parms +}; +extern "C" const ErrorInfo * const aerror_unimplemented_method = &aerror_unimplemented_method_obj; + +static const ErrorInfo aerror_file_obj = { + 0, // isa + N_("%file:1:"), // mesg + 1, // num_parms + {"file"} // parms +}; +extern "C" const ErrorInfo * const aerror_file = &aerror_file_obj; + +static const ErrorInfo aerror_cant_open_file_obj = { + aerror_file, // isa + N_("The file \"%file:1\" can not be opened"), // mesg + 1, // num_parms + {"file"} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_open_file = &aerror_cant_open_file_obj; + +static const ErrorInfo aerror_cant_read_file_obj = { + aerror_cant_open_file, // isa + N_("The file \"%file:1\" can not be opened for reading."), // mesg + 1, // num_parms + {"file"} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_read_file = &aerror_cant_read_file_obj; + +static const ErrorInfo aerror_cant_write_file_obj = { + aerror_cant_open_file, // isa + N_("The file \"%file:1\" can not be opened for writing."), // mesg + 1, // num_parms + {"file"} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_write_file = &aerror_cant_write_file_obj; + +static const ErrorInfo aerror_invalid_name_obj = { + aerror_file, // isa + N_("The file name \"%file:1\" is invalid."), // mesg + 1, // num_parms + {"file"} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_name = &aerror_invalid_name_obj; + +static const ErrorInfo aerror_bad_file_format_obj = { + aerror_file, // isa + N_("The file \"%file:1\" is not in the proper format."), // mesg + 1, // num_parms + {"file"} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_file_format = &aerror_bad_file_format_obj; + +static const ErrorInfo aerror_dir_obj = { + 0, // isa + 0, // mesg + 1, // num_parms + {"dir"} // parms +}; +extern "C" const ErrorInfo * const aerror_dir = &aerror_dir_obj; + +static const ErrorInfo aerror_cant_read_dir_obj = { + aerror_dir, // isa + N_("The directory \"%dir:1\" can not be opened for reading."), // mesg + 1, // num_parms + {"dir"} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_read_dir = &aerror_cant_read_dir_obj; + +static const ErrorInfo aerror_config_obj = { + 0, // isa + 0, // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_config = &aerror_config_obj; + +static const ErrorInfo aerror_unknown_key_obj = { + aerror_config, // isa + N_("The key \"%key:1\" is unknown."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_unknown_key = &aerror_unknown_key_obj; + +static const ErrorInfo aerror_cant_change_value_obj = { + aerror_config, // isa + N_("The value for option \"%key:1\" can not be changed."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_change_value = &aerror_cant_change_value_obj; + +static const ErrorInfo aerror_bad_key_obj = { + aerror_config, // isa + N_("The key \"%key:1\" is not %accepted:2 and is thus invalid."), // mesg + 2, // num_parms + {"key", "accepted"} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_key = &aerror_bad_key_obj; + +static const ErrorInfo aerror_bad_value_obj = { + aerror_config, // isa + N_("The value \"%value:2\" is not %accepted:3 and is thus invalid for the key \"%key:1\"."), // mesg + 3, // num_parms + {"key", "value", "accepted"} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_value = &aerror_bad_value_obj; + +static const ErrorInfo aerror_duplicate_obj = { + aerror_config, // isa + 0, // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_duplicate = &aerror_duplicate_obj; + +static const ErrorInfo aerror_key_not_string_obj = { + aerror_config, // isa + N_("The key \"%key:1\" is not a string."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_key_not_string = &aerror_key_not_string_obj; + +static const ErrorInfo aerror_key_not_int_obj = { + aerror_config, // isa + N_("The key \"%key:1\" is not an integer."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_key_not_int = &aerror_key_not_int_obj; + +static const ErrorInfo aerror_key_not_bool_obj = { + aerror_config, // isa + N_("The key \"%key:1\" is not a boolean."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_key_not_bool = &aerror_key_not_bool_obj; + +static const ErrorInfo aerror_key_not_list_obj = { + aerror_config, // isa + N_("The key \"%key:1\" is not a list."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_key_not_list = &aerror_key_not_list_obj; + +static const ErrorInfo aerror_no_value_reset_obj = { + aerror_config, // isa + N_("The key \"%key:1\" does not take any parameters when prefixed by a \"reset-\"."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_no_value_reset = &aerror_no_value_reset_obj; + +static const ErrorInfo aerror_no_value_enable_obj = { + aerror_config, // isa + N_("The key \"%key:1\" does not take any parameters when prefixed by an \"enable-\"."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_no_value_enable = &aerror_no_value_enable_obj; + +static const ErrorInfo aerror_no_value_disable_obj = { + aerror_config, // isa + N_("The key \"%key:1\" does not take any parameters when prefixed by a \"dont-\" or \"disable-\"."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_no_value_disable = &aerror_no_value_disable_obj; + +static const ErrorInfo aerror_no_value_clear_obj = { + aerror_config, // isa + N_("The key \"%key:1\" does not take any parameters when prefixed by a \"clear-\"."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_no_value_clear = &aerror_no_value_clear_obj; + +static const ErrorInfo aerror_language_related_obj = { + 0, // isa + 0, // mesg + 1, // num_parms + {"lang"} // parms +}; +extern "C" const ErrorInfo * const aerror_language_related = &aerror_language_related_obj; + +static const ErrorInfo aerror_unknown_language_obj = { + aerror_language_related, // isa + N_("The language \"%lang:1\" is not known."), // mesg + 1, // num_parms + {"lang"} // parms +}; +extern "C" const ErrorInfo * const aerror_unknown_language = &aerror_unknown_language_obj; + +static const ErrorInfo aerror_unknown_soundslike_obj = { + aerror_language_related, // isa + N_("The soundslike \"%sl:2\" is not known."), // mesg + 2, // num_parms + {"lang", "sl"} // parms +}; +extern "C" const ErrorInfo * const aerror_unknown_soundslike = &aerror_unknown_soundslike_obj; + +static const ErrorInfo aerror_language_not_supported_obj = { + aerror_language_related, // isa + N_("The language \"%lang:1\" is not supported."), // mesg + 1, // num_parms + {"lang"} // parms +}; +extern "C" const ErrorInfo * const aerror_language_not_supported = &aerror_language_not_supported_obj; + +static const ErrorInfo aerror_no_wordlist_for_lang_obj = { + aerror_language_related, // isa + N_("No word lists can be found for the language \"%lang:1\"."), // mesg + 1, // num_parms + {"lang"} // parms +}; +extern "C" const ErrorInfo * const aerror_no_wordlist_for_lang = &aerror_no_wordlist_for_lang_obj; + +static const ErrorInfo aerror_mismatched_language_obj = { + aerror_language_related, // isa + N_("Expected language \"%lang:1\" but got \"%prev:2\"."), // mesg + 2, // num_parms + {"lang", "prev"} // parms +}; +extern "C" const ErrorInfo * const aerror_mismatched_language = &aerror_mismatched_language_obj; + +static const ErrorInfo aerror_affix_obj = { + 0, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_affix = &aerror_affix_obj; + +static const ErrorInfo aerror_corrupt_affix_obj = { + aerror_affix, // isa + N_("Affix '%aff:1' is corrupt."), // mesg + 1, // num_parms + {"aff"} // parms +}; +extern "C" const ErrorInfo * const aerror_corrupt_affix = &aerror_corrupt_affix_obj; + +static const ErrorInfo aerror_invalid_cond_obj = { + aerror_affix, // isa + N_("The condition \"%cond:1\" is invalid."), // mesg + 1, // num_parms + {"cond"} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_cond = &aerror_invalid_cond_obj; + +static const ErrorInfo aerror_invalid_cond_strip_obj = { + aerror_affix, // isa + N_("The condition \"%cond:1\" does not guarantee that \"%strip:2\" can always be stripped."), // mesg + 2, // num_parms + {"cond", "strip"} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_cond_strip = &aerror_invalid_cond_strip_obj; + +static const ErrorInfo aerror_incorrect_encoding_obj = { + aerror_affix, // isa + N_("The file \"%file:1\" is not in the proper format. Expected the file to be in \"%exp:2\" not \"%got:3\"."), // mesg + 3, // num_parms + {"file", "exp", "got"} // parms +}; +extern "C" const ErrorInfo * const aerror_incorrect_encoding = &aerror_incorrect_encoding_obj; + +static const ErrorInfo aerror_encoding_obj = { + 0, // isa + 0, // mesg + 1, // num_parms + {"encod"} // parms +}; +extern "C" const ErrorInfo * const aerror_encoding = &aerror_encoding_obj; + +static const ErrorInfo aerror_unknown_encoding_obj = { + aerror_encoding, // isa + N_("The encoding \"%encod:1\" is not known."), // mesg + 1, // num_parms + {"encod"} // parms +}; +extern "C" const ErrorInfo * const aerror_unknown_encoding = &aerror_unknown_encoding_obj; + +static const ErrorInfo aerror_encoding_not_supported_obj = { + aerror_encoding, // isa + N_("The encoding \"%encod:1\" is not supported."), // mesg + 1, // num_parms + {"encod"} // parms +}; +extern "C" const ErrorInfo * const aerror_encoding_not_supported = &aerror_encoding_not_supported_obj; + +static const ErrorInfo aerror_conversion_not_supported_obj = { + aerror_encoding, // isa + N_("The conversion from \"%encod:1\" to \"%encod2:2\" is not supported."), // mesg + 2, // num_parms + {"encod", "encod2"} // parms +}; +extern "C" const ErrorInfo * const aerror_conversion_not_supported = &aerror_conversion_not_supported_obj; + +static const ErrorInfo aerror_pipe_obj = { + 0, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_pipe = &aerror_pipe_obj; + +static const ErrorInfo aerror_cant_create_pipe_obj = { + aerror_pipe, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_create_pipe = &aerror_cant_create_pipe_obj; + +static const ErrorInfo aerror_process_died_obj = { + aerror_pipe, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_process_died = &aerror_process_died_obj; + +static const ErrorInfo aerror_bad_input_obj = { + 0, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_input = &aerror_bad_input_obj; + +static const ErrorInfo aerror_invalid_string_obj = { + aerror_bad_input, // isa + N_("The string \"%str:1\" is invalid."), // mesg + 1, // num_parms + {"str"} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_string = &aerror_invalid_string_obj; + +static const ErrorInfo aerror_invalid_word_obj = { + aerror_bad_input, // isa + N_("The word \"%word:1\" is invalid."), // mesg + 1, // num_parms + {"word"} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_word = &aerror_invalid_word_obj; + +static const ErrorInfo aerror_invalid_affix_obj = { + aerror_bad_input, // isa + N_("The affix flag '%aff:1' is invalid for word \"%word:2\"."), // mesg + 2, // num_parms + {"aff", "word"} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_affix = &aerror_invalid_affix_obj; + +static const ErrorInfo aerror_inapplicable_affix_obj = { + aerror_bad_input, // isa + N_("The affix flag '%aff:1' can not be applied to word \"%word:2\"."), // mesg + 2, // num_parms + {"aff", "word"} // parms +}; +extern "C" const ErrorInfo * const aerror_inapplicable_affix = &aerror_inapplicable_affix_obj; + +static const ErrorInfo aerror_unknown_unichar_obj = { + aerror_bad_input, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_unknown_unichar = &aerror_unknown_unichar_obj; + +static const ErrorInfo aerror_word_list_flags_obj = { + aerror_bad_input, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_word_list_flags = &aerror_word_list_flags_obj; + +static const ErrorInfo aerror_invalid_flag_obj = { + aerror_word_list_flags, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_flag = &aerror_invalid_flag_obj; + +static const ErrorInfo aerror_conflicting_flags_obj = { + aerror_word_list_flags, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_conflicting_flags = &aerror_conflicting_flags_obj; + +static const ErrorInfo aerror_version_control_obj = { + 0, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_version_control = &aerror_version_control_obj; + +static const ErrorInfo aerror_bad_version_string_obj = { + aerror_version_control, // isa + N_("not a version number"), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_version_string = &aerror_bad_version_string_obj; + +static const ErrorInfo aerror_filter_obj = { + 0, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_filter = &aerror_filter_obj; + +static const ErrorInfo aerror_cant_dlopen_file_obj = { + aerror_filter, // isa + N_("dlopen returned \"%return:1\"."), // mesg + 1, // num_parms + {"return"} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_dlopen_file = &aerror_cant_dlopen_file_obj; + +static const ErrorInfo aerror_empty_filter_obj = { + aerror_filter, // isa + N_("The file \"%filter:1\" does not contain any filters."), // mesg + 1, // num_parms + {"filter"} // parms +}; +extern "C" const ErrorInfo * const aerror_empty_filter = &aerror_empty_filter_obj; + +static const ErrorInfo aerror_no_such_filter_obj = { + aerror_filter, // isa + N_("The filter \"%filter:1\" does not exist."), // mesg + 1, // num_parms + {"filter"} // parms +}; +extern "C" const ErrorInfo * const aerror_no_such_filter = &aerror_no_such_filter_obj; + +static const ErrorInfo aerror_confusing_version_obj = { + aerror_filter, // isa + N_("Confused by version control."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_confusing_version = &aerror_confusing_version_obj; + +static const ErrorInfo aerror_bad_version_obj = { + aerror_filter, // isa + N_("Aspell version does not match filter's requirement."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_version = &aerror_bad_version_obj; + +static const ErrorInfo aerror_identical_option_obj = { + aerror_filter, // isa + N_("Filter option already exists."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_identical_option = &aerror_identical_option_obj; + +static const ErrorInfo aerror_options_only_obj = { + aerror_filter, // isa + N_("Use option modifiers only within named option."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_options_only = &aerror_options_only_obj; + +static const ErrorInfo aerror_invalid_option_modifier_obj = { + aerror_filter, // isa + N_("Option modifier unknown."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_option_modifier = &aerror_invalid_option_modifier_obj; + +static const ErrorInfo aerror_cant_describe_filter_obj = { + aerror_filter, // isa + N_("Error setting filter description."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_cant_describe_filter = &aerror_cant_describe_filter_obj; + +static const ErrorInfo aerror_filter_mode_file_obj = { + 0, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_filter_mode_file = &aerror_filter_mode_file_obj; + +static const ErrorInfo aerror_mode_option_name_obj = { + aerror_filter_mode_file, // isa + N_("Empty option specifier."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_mode_option_name = &aerror_mode_option_name_obj; + +static const ErrorInfo aerror_no_filter_to_option_obj = { + aerror_filter_mode_file, // isa + N_("Option \"%option:1\" possibly specified prior to filter."), // mesg + 1, // num_parms + {"option"} // parms +}; +extern "C" const ErrorInfo * const aerror_no_filter_to_option = &aerror_no_filter_to_option_obj; + +static const ErrorInfo aerror_bad_mode_key_obj = { + aerror_filter_mode_file, // isa + N_("Unknown mode description key \"%key:1\"."), // mesg + 1, // num_parms + {"key"} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_mode_key = &aerror_bad_mode_key_obj; + +static const ErrorInfo aerror_expect_mode_key_obj = { + aerror_filter_mode_file, // isa + N_("Expecting \"%modekey:1\" key."), // mesg + 1, // num_parms + {"modekey"} // parms +}; +extern "C" const ErrorInfo * const aerror_expect_mode_key = &aerror_expect_mode_key_obj; + +static const ErrorInfo aerror_mode_version_requirement_obj = { + aerror_filter_mode_file, // isa + N_("Version specifier missing key: \"aspell\"."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_mode_version_requirement = &aerror_mode_version_requirement_obj; + +static const ErrorInfo aerror_confusing_mode_version_obj = { + aerror_filter_mode_file, // isa + N_("Confused by version control."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_confusing_mode_version = &aerror_confusing_mode_version_obj; + +static const ErrorInfo aerror_bad_mode_version_obj = { + aerror_filter_mode_file, // isa + N_("Aspell version does not match mode's requirement."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_mode_version = &aerror_bad_mode_version_obj; + +static const ErrorInfo aerror_missing_magic_expression_obj = { + aerror_filter_mode_file, // isa + N_("Missing magic mode expression."), // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_missing_magic_expression = &aerror_missing_magic_expression_obj; + +static const ErrorInfo aerror_empty_file_ext_obj = { + aerror_filter_mode_file, // isa + N_("Empty extension at char %char:1."), // mesg + 1, // num_parms + {"char"} // parms +}; +extern "C" const ErrorInfo * const aerror_empty_file_ext = &aerror_empty_file_ext_obj; + +static const ErrorInfo aerror_filter_mode_expand_obj = { + 0, // isa + N_("\"%mode:1\" error"), // mesg + 1, // num_parms + {"mode"} // parms +}; +extern "C" const ErrorInfo * const aerror_filter_mode_expand = &aerror_filter_mode_expand_obj; + +static const ErrorInfo aerror_unknown_mode_obj = { + aerror_filter_mode_expand, // isa + N_("Unknown mode: \"%mode:1\"."), // mesg + 1, // num_parms + {"mode"} // parms +}; +extern "C" const ErrorInfo * const aerror_unknown_mode = &aerror_unknown_mode_obj; + +static const ErrorInfo aerror_mode_extend_expand_obj = { + aerror_filter_mode_expand, // isa + N_("\"%mode:1\" error while extend Aspell modes. (out of memory?)"), // mesg + 1, // num_parms + {"mode"} // parms +}; +extern "C" const ErrorInfo * const aerror_mode_extend_expand = &aerror_mode_extend_expand_obj; + +static const ErrorInfo aerror_filter_mode_magic_obj = { + 0, // isa + 0, // mesg + 2, // num_parms + {"mode", "magic"} // parms +}; +extern "C" const ErrorInfo * const aerror_filter_mode_magic = &aerror_filter_mode_magic_obj; + +static const ErrorInfo aerror_file_magic_pos_obj = { + aerror_filter_mode_magic, // isa + N_("\"%mode:1\": no start for magic search given for magic \"%magic:2\"."), // mesg + 2, // num_parms + {"mode", "magic"} // parms +}; +extern "C" const ErrorInfo * const aerror_file_magic_pos = &aerror_file_magic_pos_obj; + +static const ErrorInfo aerror_file_magic_range_obj = { + aerror_filter_mode_magic, // isa + N_("\"%mode:1\": no range for magic search given for magic \"%magic:2\"."), // mesg + 2, // num_parms + {"mode", "magic"} // parms +}; +extern "C" const ErrorInfo * const aerror_file_magic_range = &aerror_file_magic_range_obj; + +static const ErrorInfo aerror_missing_magic_obj = { + aerror_filter_mode_magic, // isa + N_("\"%mode:1\": no magic expression available for magic \"%magic:2\"."), // mesg + 2, // num_parms + {"mode", "magic"} // parms +}; +extern "C" const ErrorInfo * const aerror_missing_magic = &aerror_missing_magic_obj; + +static const ErrorInfo aerror_bad_magic_obj = { + aerror_filter_mode_magic, // isa + N_("\"%mode:1\": Magic \"%magic:2\": bad regular expression after location specifier; regexp reports: \"%regerr:3\"."), // mesg + 3, // num_parms + {"mode", "magic", "regerr"} // parms +}; +extern "C" const ErrorInfo * const aerror_bad_magic = &aerror_bad_magic_obj; + +static const ErrorInfo aerror_expression_obj = { + 0, // isa + 0, // mesg + 0, // num_parms + {""} // parms +}; +extern "C" const ErrorInfo * const aerror_expression = &aerror_expression_obj; + +static const ErrorInfo aerror_invalid_expression_obj = { + aerror_expression, // isa + N_("\"%expression:1\" is not a valid regular expression."), // mesg + 1, // num_parms + {"expression"} // parms +}; +extern "C" const ErrorInfo * const aerror_invalid_expression = &aerror_invalid_expression_obj; + + + +} + diff --git a/jni/common/errors.hpp b/jni/common/errors.hpp new file mode 100644 index 0000000..64dacc0 --- /dev/null +++ b/jni/common/errors.hpp @@ -0,0 +1,193 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_ERRORS__HPP +#define ASPELL_ERRORS__HPP + + +namespace acommon { + +struct ErrorInfo; + +extern "C" const ErrorInfo * const aerror_other; +extern "C" const ErrorInfo * const aerror_operation_not_supported; +extern "C" const ErrorInfo * const aerror_cant_copy; +extern "C" const ErrorInfo * const aerror_unimplemented_method; +extern "C" const ErrorInfo * const aerror_file; +extern "C" const ErrorInfo * const aerror_cant_open_file; +extern "C" const ErrorInfo * const aerror_cant_read_file; +extern "C" const ErrorInfo * const aerror_cant_write_file; +extern "C" const ErrorInfo * const aerror_invalid_name; +extern "C" const ErrorInfo * const aerror_bad_file_format; +extern "C" const ErrorInfo * const aerror_dir; +extern "C" const ErrorInfo * const aerror_cant_read_dir; +extern "C" const ErrorInfo * const aerror_config; +extern "C" const ErrorInfo * const aerror_unknown_key; +extern "C" const ErrorInfo * const aerror_cant_change_value; +extern "C" const ErrorInfo * const aerror_bad_key; +extern "C" const ErrorInfo * const aerror_bad_value; +extern "C" const ErrorInfo * const aerror_duplicate; +extern "C" const ErrorInfo * const aerror_key_not_string; +extern "C" const ErrorInfo * const aerror_key_not_int; +extern "C" const ErrorInfo * const aerror_key_not_bool; +extern "C" const ErrorInfo * const aerror_key_not_list; +extern "C" const ErrorInfo * const aerror_no_value_reset; +extern "C" const ErrorInfo * const aerror_no_value_enable; +extern "C" const ErrorInfo * const aerror_no_value_disable; +extern "C" const ErrorInfo * const aerror_no_value_clear; +extern "C" const ErrorInfo * const aerror_language_related; +extern "C" const ErrorInfo * const aerror_unknown_language; +extern "C" const ErrorInfo * const aerror_unknown_soundslike; +extern "C" const ErrorInfo * const aerror_language_not_supported; +extern "C" const ErrorInfo * const aerror_no_wordlist_for_lang; +extern "C" const ErrorInfo * const aerror_mismatched_language; +extern "C" const ErrorInfo * const aerror_affix; +extern "C" const ErrorInfo * const aerror_corrupt_affix; +extern "C" const ErrorInfo * const aerror_invalid_cond; +extern "C" const ErrorInfo * const aerror_invalid_cond_strip; +extern "C" const ErrorInfo * const aerror_incorrect_encoding; +extern "C" const ErrorInfo * const aerror_encoding; +extern "C" const ErrorInfo * const aerror_unknown_encoding; +extern "C" const ErrorInfo * const aerror_encoding_not_supported; +extern "C" const ErrorInfo * const aerror_conversion_not_supported; +extern "C" const ErrorInfo * const aerror_pipe; +extern "C" const ErrorInfo * const aerror_cant_create_pipe; +extern "C" const ErrorInfo * const aerror_process_died; +extern "C" const ErrorInfo * const aerror_bad_input; +extern "C" const ErrorInfo * const aerror_invalid_string; +extern "C" const ErrorInfo * const aerror_invalid_word; +extern "C" const ErrorInfo * const aerror_invalid_affix; +extern "C" const ErrorInfo * const aerror_inapplicable_affix; +extern "C" const ErrorInfo * const aerror_unknown_unichar; +extern "C" const ErrorInfo * const aerror_word_list_flags; +extern "C" const ErrorInfo * const aerror_invalid_flag; +extern "C" const ErrorInfo * const aerror_conflicting_flags; +extern "C" const ErrorInfo * const aerror_version_control; +extern "C" const ErrorInfo * const aerror_bad_version_string; +extern "C" const ErrorInfo * const aerror_filter; +extern "C" const ErrorInfo * const aerror_cant_dlopen_file; +extern "C" const ErrorInfo * const aerror_empty_filter; +extern "C" const ErrorInfo * const aerror_no_such_filter; +extern "C" const ErrorInfo * const aerror_confusing_version; +extern "C" const ErrorInfo * const aerror_bad_version; +extern "C" const ErrorInfo * const aerror_identical_option; +extern "C" const ErrorInfo * const aerror_options_only; +extern "C" const ErrorInfo * const aerror_invalid_option_modifier; +extern "C" const ErrorInfo * const aerror_cant_describe_filter; +extern "C" const ErrorInfo * const aerror_filter_mode_file; +extern "C" const ErrorInfo * const aerror_mode_option_name; +extern "C" const ErrorInfo * const aerror_no_filter_to_option; +extern "C" const ErrorInfo * const aerror_bad_mode_key; +extern "C" const ErrorInfo * const aerror_expect_mode_key; +extern "C" const ErrorInfo * const aerror_mode_version_requirement; +extern "C" const ErrorInfo * const aerror_confusing_mode_version; +extern "C" const ErrorInfo * const aerror_bad_mode_version; +extern "C" const ErrorInfo * const aerror_missing_magic_expression; +extern "C" const ErrorInfo * const aerror_empty_file_ext; +extern "C" const ErrorInfo * const aerror_filter_mode_expand; +extern "C" const ErrorInfo * const aerror_unknown_mode; +extern "C" const ErrorInfo * const aerror_mode_extend_expand; +extern "C" const ErrorInfo * const aerror_filter_mode_magic; +extern "C" const ErrorInfo * const aerror_file_magic_pos; +extern "C" const ErrorInfo * const aerror_file_magic_range; +extern "C" const ErrorInfo * const aerror_missing_magic; +extern "C" const ErrorInfo * const aerror_bad_magic; +extern "C" const ErrorInfo * const aerror_expression; +extern "C" const ErrorInfo * const aerror_invalid_expression; + + +static const ErrorInfo * const other_error = aerror_other; +static const ErrorInfo * const operation_not_supported_error = aerror_operation_not_supported; +static const ErrorInfo * const cant_copy = aerror_cant_copy; +static const ErrorInfo * const unimplemented_method = aerror_unimplemented_method; +static const ErrorInfo * const file_error = aerror_file; +static const ErrorInfo * const cant_open_file_error = aerror_cant_open_file; +static const ErrorInfo * const cant_read_file = aerror_cant_read_file; +static const ErrorInfo * const cant_write_file = aerror_cant_write_file; +static const ErrorInfo * const invalid_name = aerror_invalid_name; +static const ErrorInfo * const bad_file_format = aerror_bad_file_format; +static const ErrorInfo * const dir_error = aerror_dir; +static const ErrorInfo * const cant_read_dir = aerror_cant_read_dir; +static const ErrorInfo * const config_error = aerror_config; +static const ErrorInfo * const unknown_key = aerror_unknown_key; +static const ErrorInfo * const cant_change_value = aerror_cant_change_value; +static const ErrorInfo * const bad_key = aerror_bad_key; +static const ErrorInfo * const bad_value = aerror_bad_value; +static const ErrorInfo * const duplicate = aerror_duplicate; +static const ErrorInfo * const key_not_string = aerror_key_not_string; +static const ErrorInfo * const key_not_int = aerror_key_not_int; +static const ErrorInfo * const key_not_bool = aerror_key_not_bool; +static const ErrorInfo * const key_not_list = aerror_key_not_list; +static const ErrorInfo * const no_value_reset = aerror_no_value_reset; +static const ErrorInfo * const no_value_enable = aerror_no_value_enable; +static const ErrorInfo * const no_value_disable = aerror_no_value_disable; +static const ErrorInfo * const no_value_clear = aerror_no_value_clear; +static const ErrorInfo * const language_related_error = aerror_language_related; +static const ErrorInfo * const unknown_language = aerror_unknown_language; +static const ErrorInfo * const unknown_soundslike = aerror_unknown_soundslike; +static const ErrorInfo * const language_not_supported = aerror_language_not_supported; +static const ErrorInfo * const no_wordlist_for_lang = aerror_no_wordlist_for_lang; +static const ErrorInfo * const mismatched_language = aerror_mismatched_language; +static const ErrorInfo * const affix_error = aerror_affix; +static const ErrorInfo * const corrupt_affix = aerror_corrupt_affix; +static const ErrorInfo * const invalid_cond = aerror_invalid_cond; +static const ErrorInfo * const invalid_cond_strip = aerror_invalid_cond_strip; +static const ErrorInfo * const incorrect_encoding = aerror_incorrect_encoding; +static const ErrorInfo * const encoding_error = aerror_encoding; +static const ErrorInfo * const unknown_encoding = aerror_unknown_encoding; +static const ErrorInfo * const encoding_not_supported = aerror_encoding_not_supported; +static const ErrorInfo * const conversion_not_supported = aerror_conversion_not_supported; +static const ErrorInfo * const pipe_error = aerror_pipe; +static const ErrorInfo * const cant_create_pipe = aerror_cant_create_pipe; +static const ErrorInfo * const process_died = aerror_process_died; +static const ErrorInfo * const bad_input_error = aerror_bad_input; +static const ErrorInfo * const invalid_string = aerror_invalid_string; +static const ErrorInfo * const invalid_word = aerror_invalid_word; +static const ErrorInfo * const invalid_affix = aerror_invalid_affix; +static const ErrorInfo * const inapplicable_affix = aerror_inapplicable_affix; +static const ErrorInfo * const unknown_unichar = aerror_unknown_unichar; +static const ErrorInfo * const word_list_flags_error = aerror_word_list_flags; +static const ErrorInfo * const invalid_flag = aerror_invalid_flag; +static const ErrorInfo * const conflicting_flags = aerror_conflicting_flags; +static const ErrorInfo * const version_control_error = aerror_version_control; +static const ErrorInfo * const bad_version_string = aerror_bad_version_string; +static const ErrorInfo * const filter_error = aerror_filter; +static const ErrorInfo * const cant_dlopen_file = aerror_cant_dlopen_file; +static const ErrorInfo * const empty_filter = aerror_empty_filter; +static const ErrorInfo * const no_such_filter = aerror_no_such_filter; +static const ErrorInfo * const confusing_version = aerror_confusing_version; +static const ErrorInfo * const bad_version = aerror_bad_version; +static const ErrorInfo * const identical_option = aerror_identical_option; +static const ErrorInfo * const options_only = aerror_options_only; +static const ErrorInfo * const invalid_option_modifier = aerror_invalid_option_modifier; +static const ErrorInfo * const cant_describe_filter = aerror_cant_describe_filter; +static const ErrorInfo * const filter_mode_file_error = aerror_filter_mode_file; +static const ErrorInfo * const mode_option_name = aerror_mode_option_name; +static const ErrorInfo * const no_filter_to_option = aerror_no_filter_to_option; +static const ErrorInfo * const bad_mode_key = aerror_bad_mode_key; +static const ErrorInfo * const expect_mode_key = aerror_expect_mode_key; +static const ErrorInfo * const mode_version_requirement = aerror_mode_version_requirement; +static const ErrorInfo * const confusing_mode_version = aerror_confusing_mode_version; +static const ErrorInfo * const bad_mode_version = aerror_bad_mode_version; +static const ErrorInfo * const missing_magic_expression = aerror_missing_magic_expression; +static const ErrorInfo * const empty_file_ext = aerror_empty_file_ext; +static const ErrorInfo * const filter_mode_expand_error = aerror_filter_mode_expand; +static const ErrorInfo * const unknown_mode = aerror_unknown_mode; +static const ErrorInfo * const mode_extend_expand = aerror_mode_extend_expand; +static const ErrorInfo * const filter_mode_magic_error = aerror_filter_mode_magic; +static const ErrorInfo * const file_magic_pos = aerror_file_magic_pos; +static const ErrorInfo * const file_magic_range = aerror_file_magic_range; +static const ErrorInfo * const missing_magic = aerror_missing_magic; +static const ErrorInfo * const bad_magic = aerror_bad_magic; +static const ErrorInfo * const expression_error = aerror_expression; +static const ErrorInfo * const invalid_expression = aerror_invalid_expression; + + +} + +#endif /* ASPELL_ERRORS__HPP */ diff --git a/jni/common/errors.lo b/jni/common/errors.lo new file mode 100644 index 0000000..c5d9d83 --- /dev/null +++ b/jni/common/errors.lo @@ -0,0 +1,12 @@ +# common/errors.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/errors.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/file_data_util.cpp b/jni/common/file_data_util.cpp new file mode 100644 index 0000000..52adb8d --- /dev/null +++ b/jni/common/file_data_util.cpp @@ -0,0 +1,75 @@ +#include "config.hpp" +#include "file_util.hpp" +#include "file_data_util.hpp" + +namespace acommon { + + // Fill in values for a local data directory and a system data directory + // The values are stored under the keys local-data-dir and data-dir. + // If the is no local-data-dir value, use the directory from master-path. + // If there is no directory in master-path, use the current working dir. + // FIXME: The case when there is no "/" in the master-path should not + // happen since it is an internal option. Unofficially, it can still + // be set by the user. This needs to eventually be fixed. + void fill_data_dir(const Config * config, String & dir1, String & dir2) { + if (config->have("local-data-dir")) { + dir1 = config->retrieve("local-data-dir"); + if (dir1[dir1.size()-1] != '/') dir1 += '/'; + } else { + dir1 = config->retrieve("master-path"); + size_t pos = dir1.rfind('/'); + if (pos != String::npos) + dir1.resize(pos + 1); + else + dir1 = "./"; + } + dir2 = config->retrieve("data-dir"); + if (dir2[dir2.size()-1] != '/') dir2 += '/'; + } + + const String & find_file(String & file, + const String & dir1, const String & dir2, + const String & name, const char * extension) + { + file = dir1 + name + extension; + if (file_exists(file)) return dir1; + file = dir2 + name + extension; + return dir2; + } + + bool find_file(String & file, + const String & dir1, const String & dir2, + const String & name, + ParmString preext, ParmString ext) + { + bool try_name_only = false; + if (name.size() > ext.size() + && memcmp(name.c_str() + name.size() - ext.size(), + ext, ext.size()) == 0) try_name_only = true; + if (!try_name_only) { + String n = name; n += preext; n += ext; + file = dir1 + n; + if (file_exists(file)) return true; + file = dir2 + n; + if (file_exists(file)) return true; + + n = name; n += ext; + file = dir1 + n; + if (file_exists(file)) return true; + file = dir2 + n; + if (file_exists(file)) return true; + } + + file = dir1 + name; + if (file_exists(file)) return true; + file = dir2 + name; + if (file_exists(file)) return true; + + if (try_name_only) {file = dir1 + name;} + else {file = dir1 + name; file += preext; file += ext;} + + return false; + } + + +} diff --git a/jni/common/file_data_util.hpp b/jni/common/file_data_util.hpp new file mode 100644 index 0000000..89beffe --- /dev/null +++ b/jni/common/file_data_util.hpp @@ -0,0 +1,20 @@ +#ifndef aspeller_file_data_util__hh +#define aspeller_file_data_util__hh + +#include "parm_string.hpp" + +namespace acommon {class Config;} + +namespace acommon { + + void fill_data_dir(const Config *, String & dir1, String & dir2); + const String & find_file(String & path, + const String & dir1, const String & dir2, + const String & name, const char * extension); + bool find_file(String & file, + const String & dir1, const String & dir2, + const String & name, + ParmString preext, ParmString ext); +} + +#endif diff --git a/jni/common/file_data_util.lo b/jni/common/file_data_util.lo new file mode 100644 index 0000000..a2f3f84 --- /dev/null +++ b/jni/common/file_data_util.lo @@ -0,0 +1,12 @@ +# common/file_data_util.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/file_data_util.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/file_util.cpp b/jni/common/file_util.cpp new file mode 100644 index 0000000..8515832 --- /dev/null +++ b/jni/common/file_util.cpp @@ -0,0 +1,235 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "settings.h" + +//#include "iostream.hpp" + +#include "config.hpp" +#include "file_util.hpp" +#include "fstream.hpp" +#include "errors.hpp" +#include "string_list.hpp" + +#ifdef USE_FILE_LOCKS +# include <fcntl.h> +# include <unistd.h> +# include <sys/types.h> +#endif + +#include <stdio.h> +#include <sys/stat.h> +#include <dirent.h> + +#ifdef WIN32 + +# include <io.h> +# define ACCESS _access +# include <windows.h> +# include <winbase.h> + +#else + +# include <unistd.h> +# define ACCESS access + +#endif + + +namespace acommon { + + // Return false if file is already an absolute path and does not need + // a directory prepended. + bool need_dir(ParmString file) { + if (file[0] == '/' || (file[0] == '.' && file[1] == '/') +#ifdef WIN32 + || (asc_isalpha(file[0]) && file[1] == ':') + || file[0] == '\\' || (file[0] == '.' && file[1] == '\\') +#endif + ) + return false; + else + return true; + } + + String add_possible_dir(ParmString dir, ParmString file) { + if (need_dir(file)) { + String path; + path += dir; + path += '/'; + path += file; + return path; + } else { + return file; + } + } + + String figure_out_dir(ParmString dir, ParmString file) + { + String temp; + int s = file.size() - 1; + while (s != -1 && file[s] != '/') --s; + if (need_dir(file)) { + temp += dir; + temp += '/'; + } + if (s != -1) { + temp.append(file, s); + } + return temp; + } + + time_t get_modification_time(FStream & f) { + struct stat s; + fstat(f.file_no(), &s); + return s.st_mtime; + } + + PosibErr<void> open_file_readlock(FStream & in, ParmString file) { + RET_ON_ERR(in.open(file, "r")); +#ifdef USE_FILE_LOCKS + int fd = in.file_no(); + struct flock fl; + fl.l_type = F_RDLCK; + fl.l_whence = SEEK_SET; + fl.l_start = 0; + fl.l_len = 0; + fcntl(fd, F_SETLKW, &fl); // ignore errors +#endif + return no_err; + } + + PosibErr<bool> open_file_writelock(FStream & inout, ParmString file) { + typedef PosibErr<bool> Ret; +#ifndef USE_FILE_LOCKS + bool exists = file_exists(file); +#endif + { + Ret pe = inout.open(file, "r+"); + if (pe.get_err() != 0) + pe = inout.open(file, "w+"); + if (pe.has_err()) + return pe; + } +#ifdef USE_FILE_LOCKS + int fd = inout.file_no(); + struct flock fl; + fl.l_type = F_WRLCK; + fl.l_whence = SEEK_SET; + fl.l_start = 0; + fl.l_len = 0; + fcntl(fd, F_SETLKW, &fl); // ignore errors + struct stat s; + fstat(fd, &s); + return s.st_size != 0; +#else + return exists; +#endif + } + + void truncate_file(FStream & f, ParmString name) { +#ifdef USE_FILE_LOCKS + f.restart(); + ftruncate(f.file_no(),0); +#else + f.close(); + f.open(name, "w+"); +#endif + } + + bool remove_file(ParmString name) { + return remove(name) == 0; + } + + bool file_exists(ParmString name) { + return ACCESS(name, F_OK) == 0; + } + + bool rename_file(ParmString orig_name, ParmString new_name) + { + remove(new_name); + return rename(orig_name, new_name) == 0; + } + + const char * get_file_name(const char * path) { + const char * file_name; + if (path != 0) { + file_name = strrchr(path,'/'); + if (file_name == 0) + file_name = path; + } else { + file_name = 0; + } + return file_name; + } + + unsigned find_file(const Config * config, const char * option, String & filename) + { + StringList sl; + config->retrieve_list(option, &sl); + return find_file(sl, filename); + } + + unsigned find_file(const StringList & sl, String & filename) + { + StringListEnumeration els = sl.elements_obj(); + const char * dir; + String path; + while ( (dir = els.next()) != 0 ) + { + path = dir; + if (path.back() != '/') path += '/'; + unsigned dir_len = path.size(); + path += filename; + if (file_exists(path)) { + filename.swap(path); + return dir_len; + } + } + return 0; + } + + PathBrowser::PathBrowser(const StringList & sl, const char * suf) + : dir_handle(0) + { + els = sl.elements(); + suffix = suf; + } + + PathBrowser::~PathBrowser() + { + delete els; + if (dir_handle) closedir((DIR *)dir_handle); + } + + const char * PathBrowser::next() + { + if (dir_handle == 0) goto get_next_dir; + begin: { + struct dirent * entry = readdir((DIR *)dir_handle); + if (entry == 0) goto try_again; + const char * name = entry->d_name; + unsigned name_len = strlen(name); + if (suffix.size() != 0 && + !(name_len > suffix.size() + && memcmp(name + name_len - suffix.size(), suffix.str(), suffix.size()) == 0)) + goto begin; + path = dir; + if (path.back() != '/') path += '/'; + path += name; + } + return path.str(); + try_again: + if (dir_handle) closedir((DIR *)dir_handle); + dir_handle = 0; + get_next_dir: + dir = els->next(); + if (!dir) return 0; + dir_handle = opendir(dir); + if (dir_handle == 0) goto try_again; + goto begin; + } +} diff --git a/jni/common/file_util.hpp b/jni/common/file_util.hpp new file mode 100644 index 0000000..665e28a --- /dev/null +++ b/jni/common/file_util.hpp @@ -0,0 +1,63 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_FILE_UTIL__HPP +#define ASPELL_FILE_UTIL__HPP + +#include <time.h> + +#include "string.hpp" +#include "posib_err.hpp" + +namespace acommon { + + class FStream; + class Config; + class StringList; + + bool need_dir(ParmString file); + String add_possible_dir(ParmString dir, ParmString file); + String figure_out_dir(ParmString dir, ParmString file); + + // FIXME: Possible remove + //void open_file(FStream & in, const string & file, + // ParmString mode = "r"); + time_t get_modification_time(FStream & f); + PosibErr<void> open_file_readlock(FStream& in, ParmString file); + PosibErr<bool> open_file_writelock(FStream & in, ParmString file); + // returns true if the file already exists + void truncate_file(FStream & f, ParmString name); + bool remove_file(ParmString name); + bool file_exists(ParmString name); + bool rename_file(ParmString orig, ParmString new_name); + // will return NULL if path is NULL. + const char * get_file_name(const char * path); + + // expands filename to the full path + // returns the length of the directory part or 0 if nothing found + unsigned find_file(const Config *, const char * option, String & filename); + unsigned find_file(const StringList &, String & filename); + + class StringEnumeration; + + class PathBrowser + { + String suffix; + String path; + StringEnumeration * els; + void * dir_handle; + const char * dir; + PathBrowser(const PathBrowser &); + void operator= (const PathBrowser &); + public: + PathBrowser(const StringList &, const char * suf = ""); + ~PathBrowser(); + const char * next(); + }; + +} + +#endif diff --git a/jni/common/file_util.lo b/jni/common/file_util.lo new file mode 100644 index 0000000..2c7170c --- /dev/null +++ b/jni/common/file_util.lo @@ -0,0 +1,12 @@ +# common/file_util.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/file_util.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/filter.cpp b/jni/common/filter.cpp new file mode 100644 index 0000000..54c5bb9 --- /dev/null +++ b/jni/common/filter.cpp @@ -0,0 +1,139 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "settings.h" + +#include "config.hpp" +#include "filter.hpp" +#include "speller.hpp" +#include "indiv_filter.hpp" +#include "strtonum.hpp" +#include "errors.hpp" +#include "asc_ctype.hpp" + +#ifdef HAVE_LIBDL +# include <dlfcn.h> +#endif + +namespace acommon { + + FilterHandle::~FilterHandle() + { + //FIXME: This causes a seg fault + //if (handle) dlclose(handle); + } + + Filter::Filter() {} + + void Filter::add_filter(IndividualFilter * filter) + { + Filters::iterator cur, end; + cur = filters_.begin(); + end = filters_.end(); + while ((cur != end) && (filter->order_num() > (*cur)->order_num())){ + ++cur; + } + filters_.insert(cur, filter); + } + + void Filter::reset() + { + Filters::iterator cur, end; + cur = filters_.begin(); + end = filters_.end(); + for (; cur != end; ++cur) + (*cur)->reset(); + } + + void Filter::process(FilterChar * & start, FilterChar * & stop) + { + Filters::iterator cur, end; + cur = filters_.begin(); + end = filters_.end(); + for (; cur != end; ++cur) + (*cur)->process(start, stop); + } + + void Filter::clear() + { + Filters::iterator cur, end; + cur = filters_.begin(); + end = filters_.end(); + for (; cur != end; ++cur){ + delete *cur; + } + filters_.clear(); + } + + Filter::~Filter() + { + clear(); + } + + static PosibErr<int> version_compare(const char * x, const char * y) + { + do { + int xn = 0, yn = 0; + if (*x) { + if (!asc_isdigit(*x)) return make_err(bad_version_string); + xn = strtoi_c(x, &x);} + if (*y) { + if (!asc_isdigit(*y)) return make_err(bad_version_string); + yn = strtoi_c(y, &y);} + int diff = xn - yn; + if (diff != 0) return diff; + if (*x) { + if (*x != '.') return make_err(bad_version_string); + ++x;} + if (*y) { + if (*y != '.') return make_err(bad_version_string); + ++y;} + } while (*x || *y); + return 0; + } + + PosibErr<bool> verify_version(const char * rel_op, + const char * actual, const char * required) + { + assert(actual != NULL && required != NULL); + + RET_ON_ERR_SET(version_compare(actual, required), int, cmp); + + if (cmp == 0 && strchr(rel_op, '=')) return true; + if (cmp < 0 && strchr(rel_op, '<')) return true; + if (cmp > 0 && strchr(rel_op, '>')) return true; + return false; + } + + PosibErr<void> check_version(const char * requirement) + { + const char * s = requirement; + + if (*s == '>' || *s == '<') s++; + if (*s == '=') s++; + + String rel_op(requirement, s - requirement); + String req_ver(s); + + char act_ver[] = PACKAGE_VERSION; + + char * seek = act_ver; + while (*seek && *seek != '-') ++seek; // remove any part after the '-' + *seek = '\0'; + + PosibErr<bool> peb = verify_version(rel_op.str(), act_ver, req_ver.str()); + + if (peb.has_err()) { + peb.ignore_err(); + return make_err(confusing_version); + } else if ( peb == false ) { + return make_err(bad_version); + } else { + return no_err; + } + } +} + diff --git a/jni/common/filter.hpp b/jni/common/filter.hpp new file mode 100644 index 0000000..25f9dd9 --- /dev/null +++ b/jni/common/filter.hpp @@ -0,0 +1,67 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_FILTER__HPP +#define ASPELL_FILTER__HPP + +#include "can_have_error.hpp" +#include "copy_ptr.hpp" +#include "filter_char.hpp" +#include "posib_err.hpp" +#include "vector.hpp" +#include "string_pair_enumeration.hpp" + +#include <stdio.h> + +namespace acommon { + + class Config; + class Speller; + class IndividualFilter; + class StringList; + struct ConfigModule; + + class Filter : public CanHaveError { + public: + + bool empty() const {return filters_.empty();} + void clear(); + void reset(); + void process(FilterChar * & start, FilterChar * & stop); + void add_filter(IndividualFilter * filter); + // setup the filter where the string list is the list of + // filters to use. + Filter(); + ~Filter(); + + private: + typedef Vector<IndividualFilter *> Filters; + Filters filters_; + }; + + PosibErr<void> set_mode_from_extension(Config * config, + ParmString filename, + FILE * in = NULL); + + PosibErr<void> setup_filter(Filter &, Config *, + bool use_decoder, + bool use_filter, + bool use_encoder); + void activate_dynamic_filteroptions(Config *c); + void activate_filter_modes(Config * config); + + void load_all_filters(Config * config); + + PosibErr<bool> verify_version(const char * relOp, + const char * actual, const char * required); + PosibErr<void> check_version(const char * requirement); + + PosibErr<StringPairEnumeration *> available_filters(Config *); + PosibErr<StringPairEnumeration *> available_filter_modes(Config *); + +}; + +#endif /* ASPELL_FILTER__HPP */ diff --git a/jni/common/filter.lo b/jni/common/filter.lo new file mode 100644 index 0000000..f748e6c --- /dev/null +++ b/jni/common/filter.lo @@ -0,0 +1,12 @@ +# common/filter.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/filter.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/filter_char.hpp b/jni/common/filter_char.hpp new file mode 100644 index 0000000..0452ae4 --- /dev/null +++ b/jni/common/filter_char.hpp @@ -0,0 +1,50 @@ +#ifndef acommon_filter_char_hh +#define acommon_filter_char_hh + +// This file is part of The New Aspell +// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +namespace acommon { + + struct FilterChar { + unsigned int chr; + unsigned int width; // width must always be < 256 + typedef unsigned int Chr; + typedef unsigned int Width; + explicit FilterChar(Chr c = 0, Width w = 1) + : chr(c), width(w) {} + FilterChar(Chr c, FilterChar o) + : chr(c), width(o.width) {} + static Width sum(const FilterChar * o, const FilterChar * stop) { + Width total = 0; + for (; o != stop; ++o) + total += o->width; + return total; + } + static Width sum(const FilterChar * o, unsigned int size) { + return sum(o, o+size); + } + FilterChar(Chr c, const FilterChar * o, unsigned int size) + : chr(c), width(sum(o,size)) {} + FilterChar(Chr c, const FilterChar * o, const FilterChar * stop) + : chr(c), width(sum(o,stop)) {} + operator Chr () const {return chr;} + FilterChar & operator= (Chr c) {chr = c; return *this;} + }; + + static inline bool operator==(FilterChar lhs, FilterChar rhs) + { + return lhs.chr == rhs.chr; + } + + static inline bool operator!=(FilterChar lhs, FilterChar rhs) + { + return lhs.chr != rhs.chr; + } + +} + +#endif diff --git a/jni/common/filter_char_vector.hpp b/jni/common/filter_char_vector.hpp new file mode 100644 index 0000000..4e14f55 --- /dev/null +++ b/jni/common/filter_char_vector.hpp @@ -0,0 +1,41 @@ +#ifndef acommon_filter_char_vector__hh +#define acommon_filter_char_vector__hh + +// This file is part of The New Aspell +// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "vector.hpp" +#include "filter_char.hpp" + +namespace acommon { + + class FilterCharVector : public Vector<FilterChar> + { + typedef Vector<FilterChar> Base; + public: + void append(const char * str, FilterChar::Width w) { + Base::append(FilterChar(*str, w)); + ++str; + for (;*str; ++str) + Base::append(FilterChar(*str, 1)); + } + void append(FilterChar::Chr c, FilterChar::Width w) { + Base::append(FilterChar(c, w)); + } + void append(FilterChar t) { + Base::append(t); + } + void append(FilterChar::Chr t) { + Base::append(FilterChar(t)); + } + void append(const FilterChar * begin, unsigned int size) { + Base::append(begin, size); + } + }; + +} + +#endif diff --git a/jni/common/filter_debug.hpp b/jni/common/filter_debug.hpp new file mode 100644 index 0000000..b054539 --- /dev/null +++ b/jni/common/filter_debug.hpp @@ -0,0 +1,41 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Christoph Hintermller under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. +// +// Added by Christoph Hintermller +// renamed from loadable-filter-API.hpp + +#ifndef ASPELL_FILTER_DEBUG__HPP +#define ASPELL_FILTER_DEBUG__HPP + +#include <stdio.h> + +#ifdef FILTER_PROGRESS_CONTROL +static FILE * controllout=stderr; +#define FDEBUGCLOSE do {\ + if ((controllout != stdout) && (controllout != stderr)) {\ + fclose(controllout);\ + controllout=stderr;\ + } } while (false) + +#define FDEBUGNOTOPEN do {\ + if ((controllout == stdout) || (controllout == stderr)) {\ + FDEBUGOPEN; \ + } } while (false) + +#define FDEBUGOPEN do {\ + FDEBUGCLOSE; \ + if ((controllout=fopen(FILTER_PROGRESS_CONTROL,"w")) == NULL) {\ + controllout=stderr;\ + }\ + setbuf(controllout,NULL);\ + fprintf(controllout,"Debug Destination %s\n",FILTER_PROGRESS_CONTROL);\ + } while (false) + +#define FDEBUG fprintf(controllout,"File: %s(%i)\n",__FILE__,__LINE__) +#define FDEBUGPRINTF(a) fprintf(controllout,a) +#endif // FILTER_PROGRESS_CONTROL + +#endif diff --git a/jni/common/fstream.cpp b/jni/common/fstream.cpp new file mode 100644 index 0000000..efc2e33 --- /dev/null +++ b/jni/common/fstream.cpp @@ -0,0 +1,149 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include <stdio.h> +#include <assert.h> + +#include "iostream.hpp" + +#include "asc_ctype.hpp" +#include "string.hpp" +#include "fstream.hpp" +#include "errors.hpp" + +namespace acommon { + + PosibErr<void> FStream::open(ParmStr name, const char * mode) + { + assert (file_ == 0); + file_ = fopen(name,mode); + if (file_ == 0) { + if (strpbrk(mode, "wa+") != 0) + return make_err(cant_write_file, name); + else + return make_err(cant_read_file, name); + } else { + return no_err; + } + } + + void FStream::close() + { + if (file_ != 0 && own_) + fclose(file_); + file_ = 0; + } + + int FStream::file_no() + { + return fileno(file_); + } + + FILE * FStream::c_stream() + { + return file_; + } + + void FStream::restart() + { + flush(); + fseek(file_,0,SEEK_SET); + } + + void FStream::skipws() + { + int c; + while (c = getc(file_), c != EOF && asc_isspace(c)); + ungetc(c, file_); + } + + FStream & FStream::operator>> (String & str) + { + skipws(); + int c; + str = ""; + while (c = getc(file_), c != EOF && !asc_isspace(c)) + str += static_cast<char>(c); + ungetc(c, file_); + return *this; + } + + FStream & FStream::operator<< (ParmStr str) + { + fputs(str, file_); + return *this; + } + + bool FStream::append_line(String & str, char d) + { + int c; + c = getc(file_); + if (c == EOF) return false; + if (c == (int)d) return true; + str.append(c); + while (c = getc(file_), c != EOF && c != (int)d) + str.append(c); + return true; + } + + bool FStream::read(void * str, unsigned int n) + { + fread(str,1,n,file_); + return operator bool(); + } + + void FStream::write(char c) + { + putc(c, file_); + } + + void FStream::write(ParmStr str) + { + fputs(str, file_); + } + + void FStream::write(const void * str, unsigned int n) + { + fwrite(str,1,n,file_); + } + + FStream & FStream::operator>> (unsigned int & num) + { + int r = fscanf(file_, " %u", &num); + if (r != 1) + close(); + return *this; + } + + + FStream & FStream::operator<< (unsigned int num) + { + fprintf(file_, "%u", num); + return *this; + } + + FStream & FStream::operator>> (int & num) + { + int r = fscanf(file_, " %i", &num); + if (r != 1) + close(); + return *this; + } + + + FStream & FStream::operator<< (int num) + { + fprintf(file_, "%i", num); + return *this; + } + + FStream & FStream::operator<< (double num) + { + fprintf(file_, "%g", num); + return *this; + } + +} diff --git a/jni/common/fstream.hpp b/jni/common/fstream.hpp new file mode 100644 index 0000000..bd98e0e --- /dev/null +++ b/jni/common/fstream.hpp @@ -0,0 +1,101 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_FSTREAM__HPP +#define ASPELL_FSTREAM__HPP + +#include <stdio.h> + +#include "string.hpp" +#include "istream.hpp" +#include "ostream.hpp" +#include "posib_err.hpp" + +// NOTE: See iostream.hpp for the standard stream (ie standard input, +// output, error) + +namespace acommon { + class String; + + class FStream : public IStream, public OStream + { + private: + FILE * file_; + bool own_; + + public: + FStream(char d = '\n') + : IStream(d), file_(0), own_(true) {} + FStream(FILE * f, bool own = true) + : IStream('\n'), file_(f), own_(own) {} + ~FStream() {close();} + + PosibErr<void> open(ParmStr, const char *); + void close(); + + operator bool() {return file_ != 0 && !feof(file_) && !ferror(file_);} + + int get() {return getc(file_);} + void ignore() {getc(file_);} + int peek() {int c = getc(file_); ungetc(c, file_); return c;} + + FILE * c_stream(); + int file_no(); + + int vprintf(const char * format, va_list ap) + { + return vfprintf(file_, format, ap); + } + + void flush() {fflush(file_);} + + // flushes the stream and goes to the beginning of the file + void restart(); + + void skipws(); + + // Will return false if there is no more data + bool append_line(String &, char d); + + // These perform raw io with any sort of formating + bool read(void *, unsigned int i); + void write(ParmStr); + void write(char c); + void write(const void *, unsigned int i); + + long int tell() {return ftell(file_);} + bool seek(long int offset, int whence = SEEK_SET) { + return fseek(file_, offset, whence) == 0; + } + + + // The << >> operators are designed to work about they same + // as they would with A C++ stream. + FStream & operator>> (char & c) + { + skipws(); + c = getc(file_); + return *this; + } + + FStream & operator<< (char c) + { + putc(c, file_); + return *this; + } + + FStream & operator>> (String &); + FStream & operator>> (unsigned int &); + FStream & operator>> (int &); + FStream & operator<< (ParmStr); + FStream & operator<< (unsigned int); + FStream & operator<< (int); + FStream & operator<< (double); + + }; +} + +#endif diff --git a/jni/common/fstream.lo b/jni/common/fstream.lo new file mode 100644 index 0000000..f1e32fb --- /dev/null +++ b/jni/common/fstream.lo @@ -0,0 +1,12 @@ +# common/fstream.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/fstream.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/generic_copy_ptr-t.hpp b/jni/common/generic_copy_ptr-t.hpp new file mode 100644 index 0000000..1f5622e --- /dev/null +++ b/jni/common/generic_copy_ptr-t.hpp @@ -0,0 +1,63 @@ +// Copyright (c) 2001 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef autil__generic_copy_ptr_t +#define autil__generic_copy_ptr_t + +#include "generic_copy_ptr.hpp" + +namespace acommon { + + template <typename T, typename Parms> + GenericCopyPtr<T,Parms>::GenericCopyPtr(const GenericCopyPtr & other) + { + if (other.ptr_ != 0) + ptr_ = parms_.clone(other.ptr_); + else + ptr_ = 0; + parms_ = other.parms_; + } + + template <typename T, typename Parms> + void GenericCopyPtr<T,Parms>::assign(const T * other_ptr, + const Parms & other_parms) + { + if (other_ptr == 0) { + if (ptr_ != 0) parms_.del(ptr_); + ptr_ = 0; + } else if (ptr_ == 0) { + ptr_ = parms_.clone(other_ptr); + } else { + parms_.assign(ptr_, other_ptr); + } + parms_ = other_parms; + } + + template <typename T, typename Parms> + void GenericCopyPtr<T,Parms>::reset (T * other, const Parms & other_parms) + { + if (ptr_ != 0) + parms_.del(ptr_); + ptr_ = other; + parms_ = other_parms; + } + + template <typename T, typename Parms> + GenericCopyPtr<T,Parms>::~GenericCopyPtr() + { + if (ptr_ != 0) + parms_.del(ptr_); + } + +} + +#endif diff --git a/jni/common/generic_copy_ptr.hpp b/jni/common/generic_copy_ptr.hpp new file mode 100644 index 0000000..40c8869 --- /dev/null +++ b/jni/common/generic_copy_ptr.hpp @@ -0,0 +1,63 @@ +// Copyright (c) 2001 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef autil__generic_copy_ptr +#define autil__generic_copy_ptr + +namespace acommon { + + // Parms is expected to have the following members + // T * Parms::clone(const T *); + // void Parms::assign(T * &, const T *); + // void Parms::del(T *); + // All members can assume that all pointers are not null + + template <typename T, typename Parms> + class GenericCopyPtr { + + T * ptr_; + Parms parms_; + + public: + + explicit GenericCopyPtr(T * p = 0, const Parms & parms = Parms()) + : ptr_(p), parms_(parms) {} + + GenericCopyPtr(const GenericCopyPtr & other); + GenericCopyPtr & operator= (const GenericCopyPtr & other) { + assign(other.ptr_, parms_); + return *this; + } + + // assign makes a copy of other + void assign(const T * other, const Parms & parms = Parms()); + + // reset takes ownership of other + void reset(T * other = 0, const Parms & parms = Parms()); + + T & operator* () const {return *ptr_;} + T * operator-> () const {return ptr_;} + T * get() const {return ptr_;} + operator T * () const {return ptr_;} + + T * release() {T * tmp = ptr_; ptr_ = 0; return tmp;} + + const Parms & parms() {return parms_;} + const Parms & parms() const {return parms_;} + + ~GenericCopyPtr(); + }; + +} + +#endif + diff --git a/jni/common/getdata.cpp b/jni/common/getdata.cpp new file mode 100644 index 0000000..7e822c9 --- /dev/null +++ b/jni/common/getdata.cpp @@ -0,0 +1,193 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include <string.h> + +#include "getdata.hpp" +#include "string.hpp" +#include "asc_ctype.hpp" + +#include "iostream.hpp" + +namespace acommon { + unsigned int linenumber = 0 ; + + bool getdata_pair(IStream & in, DataPair & d, String & buf) + { + char * p; + + // get first non blank line and count all read ones + do { + buf.clear(); + buf.append('\0'); // to avoid some special cases + if (!in.append_line(buf)) return false; + d.line_num++; + p = buf.mstr() + 1; + while (*p == ' ' || *p == '\t') ++p; + } while (*p == '#' || *p == '\0'); + + // get key + d.key.str = p; + while (*p != '\0' && + ((*p != ' ' && *p != '\t' && *p != '#') || *(p-1) == '\\')) ++p; + d.key.size = p - d.key.str; + + // figure out if there is a value and add terminate key + d.value.str = p; // in case there is no value + d.value.size = 0; + if (*p == '#' || *p == '\0') {*p = '\0'; return true;} + *p = '\0'; + + // skip any whitespace + ++p; + while (*p == ' ' || *p == '\t') ++p; + if (*p == '\0' || *p == '#') {return true;} + + // get value + d.value.str = p; + while (*p != '\0' && (*p != '#' || *(p-1) == '\\')) ++p; + + // remove trailing white space and terminate value + --p; + while (*p == ' ' || *p == '\t') --p; + if (*p == '\\' && *(p + 1) != '\0') ++p; + ++p; + d.value.size = p - d.value.str; + *p = '\0'; + + return true; + } + + char * unescape(char * dest, const char * src) + { + while (*src) { + if (*src == '\\') { + ++src; + switch (*src) { + case 'n': *dest = '\n'; break; + case 'r': *dest = '\r'; break; + case 't': *dest = '\t'; break; + case 'f': *dest = '\f'; break; + case 'v': *dest = '\v'; break; + default: *dest = *src; + } + } else { + *dest = *src; + } + ++src; + ++dest; + } + *dest = '\0'; + return dest; + } + + bool escape(char * dest, const char * src, size_t limit, const char * others) + { + const char * begin = src; + const char * end = dest + limit; + if (asc_isspace(*src)) { + if (dest == end) return false; + *dest++ = '\\'; + if (dest == end) return false; + *dest++ = *src++; + } + while (*src) { + if (dest == end) return false; + switch (*src) { + case '\n': *dest++ = '\\'; *dest = 'n'; break; + case '\r': *dest++ = '\\'; *dest = 'r'; break; + case '\t': *dest++ = '\\'; *dest = 't'; break; + case '\f': *dest++ = '\\'; *dest = 'f'; break; + case '\v': *dest++ = '\\'; *dest = 'v'; break; + case '\\': *dest++ = '\\'; *dest = '\\'; break; + case '#' : *dest++ = '\\'; *dest = '#'; break; + default: + if (others && strchr(others, *src)) *dest++ = '\\'; + *dest = *src; + } + ++src; + ++dest; + } + if (src > begin + 1 && asc_isspace(src[-1])) { + --dest; + *dest++ = '\\'; + if (dest == end) return false; + *dest++ = src[-1]; + } + *dest = '\0'; + return true; + } + + void to_lower(char * str) + { + for (; *str; str++) *str = asc_tolower(*str); + } + + void to_lower(String & res, const char * str) + { + for (; *str; str++) res += asc_tolower(*str); + } + + bool split(DataPair & d) + { + char * p = d.value; + char * end = p + d.value.size; + d.key.str = p; + while (p != end) { + ++p; + if ((*p == ' ' || *p == '\t') && *(p-1) != '\\') break; + } + d.key.size = p - d.key.str; + *p = 0; + if (p != end) { + ++p; + while (p != end && (*p == ' ' || *p == '\t')) ++p; + } + d.value.str = p; + d.value.size = end - p; + return d.key.size != 0; + } + + void init(ParmString str, DataPair & d, String & buf) + { + const char * s = str; + while (*s == ' ' || *s == '\t') ++s; + size_t l = str.size() - (s - str); + buf.assign(s, l); + d.value.str = buf.mstr(); + d.value.size = l; + } + + bool getline(IStream & in, DataPair & d, String & buf) + { + if (!in.getline(buf)) return false; + d.value.str = buf.mstr(); + d.value.size = buf.size(); + return true; + } + + char * get_nb_line(IStream & in, String & buf) + { + char * p; + // get first non blank line + do { + if (!in.getline(buf)) return 0; + p = buf.mstr(); + while (*p == ' ' || *p == '\t') ++p; + } while (*p == '#' || *p == '\0'); + return p; + } + + void remove_comments(String & buf) + { + char * p = buf.mstr(); + char * b = p; + while (*p && *p != '#') ++p; + if (*p == '#') {--p; while (p >= b && asc_isspace(*p)) --p; ++p;} + buf.resize(p - b); + } + +} diff --git a/jni/common/getdata.hpp b/jni/common/getdata.hpp new file mode 100644 index 0000000..74b57b5 --- /dev/null +++ b/jni/common/getdata.hpp @@ -0,0 +1,68 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_GET_DATA__HPP +#define ASPELL_GET_DATA__HPP + +#include <stddef.h> +#include <limits.h> +#include "string.hpp" +#include "mutable_string.hpp" + +namespace acommon { + + class IStream; + class String; + + // NOTE: getdata_pair WILL NOT unescape a string + + struct DataPair { + MutableString key; + MutableString value; + size_t line_num; + DataPair() : line_num(0) {} + }; + + bool getdata_pair(IStream & in, DataPair & d, String & buf); + + char * unescape(char * dest, const char * src); + static inline char * unescape(char * dest) {return unescape(dest, dest);} + static inline void unescape(MutableString & d) { + char * e = unescape(d.str, d.str); + d.size = e - d.str; + } + static inline void unescape(String & d) { + d.ensure_null_end(); + char * e = unescape(d.data(), d.data()); + d.resize(e - d.data()); + } + + // if limit is not given than dest should have enough space for + // twice the number of characters of src + bool escape(char * dest, const char * src, + size_t limit = INT_MAX, const char * others = 0); + + void to_lower(char *); + void to_lower(String &, const char *); + + // extract the first whitespace delimited word from d.value and put + // it in d.key. d.value is expected not to have any leading + // whitespace. The string is modified in place so that d.key will be + // null terminated. d.value is modified to point to any additional + // data after key with any leading white space removed. Returns + // false when there are no more words to extract + bool split(DataPair & d); + + // preps a string for split + void init(ParmString str, DataPair & d, String & buf); + + bool getline(IStream & in, DataPair & d, String & buf); + + char * get_nb_line(IStream & in, String & buf); + void remove_comments(String & buf); + +} +#endif diff --git a/jni/common/getdata.lo b/jni/common/getdata.lo new file mode 100644 index 0000000..35c1ca4 --- /dev/null +++ b/jni/common/getdata.lo @@ -0,0 +1,12 @@ +# common/getdata.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/getdata.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/gettext.h b/jni/common/gettext.h new file mode 100644 index 0000000..20dac05 --- /dev/null +++ b/jni/common/gettext.h @@ -0,0 +1,100 @@ +/* Convenience header for conditional use of GNU <libintl.h>. + Copyright (C) 1995-1998, 2000-2002 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU Library General Public License as published + by the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + USA. */ + +// NOTE: This file MUST be the last file included to avoid problems +// with system header files that might include libintl.h + +#ifndef _LIBGETTEXT_H +#define _LIBGETTEXT_H 1 + +/* NLS can be disabled through the configure --disable-nls option. */ +#if ENABLE_NLS + +/* Get declarations of GNU message catalog functions. */ +# include <libintl.h> + +#else + +/* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which + chokes if dcgettext is defined as a macro. So include it now, to make + later inclusions of <locale.h> a NOP. We don't include <libintl.h> + as well because people using "gettext.h" will not include <libintl.h>, + and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> + is OK. */ +#if defined(__sun) +# include <locale.h> +#endif + +/* Disabled NLS. + The casts to 'const char *' serve the purpose of producing warnings + for invalid uses of the value returned from these functions. + On pre-ANSI systems without 'const', the config.h file is supposed to + contain "#define const". */ +# undef gettext +# define gettext(Msgid) ((const char *) (Msgid)) +# undef dgettext +# define dgettext(Domainname, Msgid) ((const char *) (Msgid)) +# undef dcgettext +# define dcgettext(Domainname, Msgid, Category) ((const char *) (Msgid)) +# undef ngettext +# define ngettext(Msgid1, Msgid2, N) \ + ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) +# undef dngettext +# define dngettext(Domainname, Msgid1, Msgid2, N) \ + ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) +# undef dcngettext +# define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ + ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) +# undef textdomain +# define textdomain(Domainname) ((const char *) (Domainname)) +# undef bindtextdomain +# define bindtextdomain(Domainname, Dirname) ((const char *) (Dirname)) +# undef bind_textdomain_codeset +# define bind_textdomain_codeset(Domainname, Codeset) ((const char *) (Codeset)) + +#endif + +/* A pseudo function call that serves as a marker for the automated + extraction of messages, but does not call gettext(). The run-time + translation is done at a different place in the code. + The argument, String, should be a literal string. Concatenated strings + and other string expressions won't work. + The macro's expansion is not parenthesized, so that it is suitable as + initializer for static 'char[]' or 'const char[]' variables. */ +#define gettext_noop(String) String + +/* short cut macros */ + +/* I use dgettext so that the right domain will be looked at when + Aspell is used as a library */ +#define _(String) dgettext ("aspell", String) +#define N_(String) gettext_noop (String) + +/* use gt_ when there is the possibility that str will be the empty + string. gettext in this case is not guaranteed to return an + empty string */ +static inline const char * gt_(const char * str) { + return str[0] == '\0' ? str : _(str); +} + +extern "C" void aspell_gettext_init(); + +/* NOTE: DO NOT USE "gettext", ALWAYS USE "_" BECAUSE WHEN ASPELL IS USED + AS A LIBRARY THE DOMAIN IS NOT GUARANTEED TO BE ASPELL */ + +#endif /* _LIBGETTEXT_H */ diff --git a/jni/common/gettext_init.cpp b/jni/common/gettext_init.cpp new file mode 100644 index 0000000..02afb47 --- /dev/null +++ b/jni/common/gettext_init.cpp @@ -0,0 +1,28 @@ + +#include "gettext.h" + +#if ENABLE_NLS + +#include "lock.hpp" + +static acommon::Mutex lock; + +static bool did_init = false; + +extern "C" void aspell_gettext_init() +{ + { + acommon::Lock l(&lock); + if (did_init) return; + did_init = true; + } + bindtextdomain("aspell", LOCALEDIR); +} + +#else + +extern "C" void aspell_gettext_init() +{ +} + +#endif diff --git a/jni/common/gettext_init.lo b/jni/common/gettext_init.lo new file mode 100644 index 0000000..f6d3a3e --- /dev/null +++ b/jni/common/gettext_init.lo @@ -0,0 +1,12 @@ +# common/gettext_init.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/gettext_init.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/hash-t.hpp b/jni/common/hash-t.hpp new file mode 100644 index 0000000..2bcfeff --- /dev/null +++ b/jni/common/hash-t.hpp @@ -0,0 +1,234 @@ +// Copyright (c) 2001,2011 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without fee, +// provided that the above copyright notice appear in all copies and +// that both that copyright notice and this permission notice appear +// in supporting documentation. Silicon Graphics makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied warranty. + +// prime list taken from SGI STL with the following copyright + +/* + * Copyright (c) 1996-1998 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + * + * Copyright (c) 1994 + * Hewlett-Packard Company + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Hewlett-Packard Company makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + */ + +#ifndef autil__hash_t_hh +#define autil__hash_t_hh + +#include <cstdlib> +#include <new> + +#include "hash.hpp" +#include "block_slist-t.hpp" + +namespace acommon { + + static const unsigned int primes[] = + { + 53, 97, 193, 389, 769, + 1543, 3079, 6151, 12289, 24593, + 49157, 98317, 196613, 393241, 786433, + 1572869, 3145739, 6291469, 12582917, 25165843, + 50331653, 100663319, 201326611, 402653189, 805306457, + static_cast<unsigned int>(-1) + }; + + template <class P> + typename HashTable<P>::PrimeIndex HashTable<P>::next_largest(Size s) + { + PrimeIndex i = prime_index_; + while (assert(primes[i] != static_cast<PrimeIndex>(-1)), primes[i] < s) ++i; + return i; + } + + template <class P> + void HashTable<P>::create_table(PrimeIndex i) { + prime_index_ = i; + table_size_ = primes[prime_index_]; + table_ = reinterpret_cast<Node * *>(calloc(table_size_+1,sizeof(Node *))); + table_end_ = table_ + table_size_; + *table_end_ = reinterpret_cast<Node *>(table_end_); + } + + template <class P> + void HashTable<P>::init(PrimeIndex i) + { + size_ = 0; + create_table(i); + node_pool_.add_block(primes[i]); + } + + template <class P> + std::pair<typename HashTable<P>::iterator,bool> HashTable<P>::insert(const Value & to_insert) + { + bool have; + iterator put_me_here = find_i(parms_.key(to_insert), have); + if (have && !parms_.is_multi) + return std::pair<iterator,bool>(put_me_here,false); + Node * new_node = node_pool_.new_node(); + if (new_node == 0) { + resize_i(prime_index_+1); + return insert(to_insert); + } + new + (const_cast<void *>(reinterpret_cast<const void *>(&new_node->data))) + Value(to_insert); + new_node->next = *put_me_here.n; + *put_me_here.n = new_node; + ++size_; + return std::pair<iterator,bool>(put_me_here,true); + } + + template <class P> + void HashTable<P>::erase(iterator to_erase) + { + (*to_erase.n)->data.~Value(); + Node * tmp = *to_erase.n; + *to_erase.n = (*to_erase.n)->next; + node_pool_.remove_node(tmp); + --size_; + } + + template <class P> + typename HashTable<P>::Size HashTable<P>::erase(const Key & k) + { + Size num_erased = 0; + bool irrelevant; + Node * * first = find_i(k,irrelevant).n; + Node * n = *first; + while (n != 0 && parms_.equal(parms_.key(n->data), k)) { + Node * tmp = n; + n->data.~Value(); + n = n->next; + node_pool_.remove_node(tmp); + ++num_erased; + } + *first = n; + size_ -= num_erased; + return num_erased; + } + + template <class P> + typename HashTable<P>::iterator HashTable<P>::find_i(const Key & to_find, bool & have) + { + Size pos = parms_.hash(to_find) % table_size_; + Node * * n = table_ + pos; + have = false; + while (true) { + if (*n == 0) { + break; + } else if (parms_.equal(parms_.key((*n)->data),to_find)) { + have = true; + break; + } + n = &(*n)->next; + } + return iterator(table_ + pos, n); + } + + template <class P> + std::pair<typename HashTable<P>::iterator, typename HashTable<P>::iterator> + HashTable<P>::equal_range_i(const Key & to_find, int & c) + { + c = 0; + bool have; + iterator first = find_i(to_find,have); + if (!have) + return std::pair<iterator,iterator>(end(),end()); + iterator last = first; + c = 1; + ++last; + iterator e = end(); + while (!(last == e) && parms_.equal(parms_.key(*last), to_find)) { + ++c; + ++last; + } + return std::pair<iterator,iterator>(first,last); + } + + template <class P> + void HashTable<P>::del() + { + for (Node * * i = table_; i != table_end_; ++i) { + Node * n = *i; + while (n != 0) { + n->data.~Value(); + n = n->next; + } + } + free (table_); + size_ = 0; + node_pool_.clear(); + table_ = 0; + table_size_ = 0; + prime_index_ = 0; + } + + template <class P> + void HashTable<P>::resize_i(PrimeIndex new_prime_index) + { + Node * * old_table = table_; + Node * * old_end = table_end_; + Size old_size = table_size_; + create_table(new_prime_index); + for (Node * * i = old_table; i != old_end; ++i) { + Node * n = *i; + while (n != 0) { + Node * * put_me_here = table_ + (parms_.hash(parms_.key(n->data)) % table_size_); + Node * tmp = n; + n = n->next; + tmp->next = *put_me_here; + *put_me_here = tmp; + } + } + free(old_table); + node_pool_.add_block(table_size_ - old_size); + } + + template <class P> + void HashTable<P>::copy(const HashTable & other) + { + init(other.prime_index_); + size_ = other.size_; + parms_ = other.parms_; + for (unsigned int i = 0; i != other.table_size_; ++i) { + for (Node * j = other.table_[i]; j != 0; j = j->next) { + Node * n = node_pool_.new_node(); + new + (const_cast<void *>(reinterpret_cast<const void *>(&n->data))) + Value(j->data); + n->next = table_[i]; + table_[i] = n; + } + } + } + +} + + +#endif diff --git a/jni/common/hash.hpp b/jni/common/hash.hpp new file mode 100644 index 0000000..949aa42 --- /dev/null +++ b/jni/common/hash.hpp @@ -0,0 +1,337 @@ +// Copyright (c) 2001,2011 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. No representations about the +// suitability of this software for any purpose. It is provided "as +// is" without express or implied warranty. + +#ifndef autil__hash_hh +#define autil__hash_hh + +#include <utility> +#include <functional> + +#include "settings.h" + +#include "hash_fun.hpp" +#include "block_slist.hpp" + +// This file provided implementation for hash_set, hash_multiset, hash_map +// and hash_multimap which are very similar to SGI STL's implementation +// with a few notable exceptions. The main one is that while +// const_iterator is never invalided until the actual element is removed +// iterator is invalided my most all non-const member functions. This +// is to simply the implementation slightly and allow the removal +// of an element in guaranteed constant time when a non-const iterator +// is provided rather that normally constant time. + +// All of the hash_* implementations are derived from the HashTable class + +namespace acommon { + + // Parms is expected to have the following methods + // typename Value + // typename Key + // bool is_multi; + // Size hash(Key) + // bool equal(Key, Key) + // Key key(Value) + + template <class Value> + class HT_ConstIterator; + + template <class Value> + class HT_Iterator { + public: // but don't use + typedef typename BlockSList<Value>::Node Node; + Node * * t; + Node * * n; + void adv() {while (*t == 0) ++t; n = t;} + void inc() {n = &(*n)->next; if (*n == 0) {++t; adv();}} + HT_Iterator(Node * * t0) : t(t0) {adv();} + HT_Iterator(Node * * t0, Node * * n0) : t(t0), n(n0) {} + public: + HT_Iterator() : t(0), n(0) {} + explicit HT_Iterator(const HT_ConstIterator<Value> & other); + Value & operator*() const {return (*n)->data;} + Value * operator->() const {return &(*n)->data;} + HT_Iterator & operator++() {inc(); return *this;} + HT_Iterator operator++(int) {HT_Iterator tmp(*this); inc(); return tmp;} + }; + + template <class Value> + class HT_ConstIterator + { + public: // but don't use + typedef typename BlockSList<Value>::Node Node; + Node * * t; + Node * n; + void adv() {while (*t == 0) ++t; n = *t;} + void inc() {n = n->next; if (n == 0) {++t; adv();}} + HT_ConstIterator(Node * * t0) : t(t0) {adv();} + HT_ConstIterator(Node * * t0, Node * n0) : t(t0), n(n0) {} + public: + HT_ConstIterator() : t(0), n(0) {} + HT_ConstIterator(const HT_Iterator<Value> & other) : t(other.t), n(*other.n) {} + Value & operator*() const {return n->data;} + Value * operator->() const {return &n->data;} + HT_ConstIterator & operator++() {inc(); return *this;} + HT_ConstIterator operator++(int) {HT_ConstIterator tmp(*this); inc(); return tmp;} + }; + + template <typename P> + class HashTable + { + public: + typedef P parms_type; + typedef parms_type Parms; + + typedef typename Parms::Value value_type; + typedef value_type Value; + + typedef typename Parms::Key key_type; + typedef key_type Key; + + typedef unsigned int size_type; + typedef size_type Size; + + public: // but don't use + typedef BlockSList<Value> NodePool; + typedef typename NodePool::Node Node; + + private: + typedef unsigned int PrimeIndex; + + Size size_; + Node * * table_; // always one larger than table_size_; + Node * * table_end_; // always at true table_end - 1 + Size table_size_; + PrimeIndex prime_index_; + NodePool node_pool_; + Parms parms_; + + public: + + typedef HT_Iterator<Value> iterator; + typedef HT_ConstIterator<Value> const_iterator; + + private: + void del(); + void init(PrimeIndex); + void copy(const HashTable & other); + PrimeIndex next_largest(Size); + void resize_i(PrimeIndex); + void create_table(PrimeIndex); + iterator find_i(const Key &, bool & have); + std::pair<iterator, iterator> equal_range_i(const Key & to_find, int & c); + + public: + + HashTable() {init(0);} + HashTable(const Parms & p) : parms_(p) {init(0);} + HashTable(int size) : prime_index_(0) {init(next_largest(size));} + HashTable(int size, const Parms & p) + : prime_index_(0), parms_(p) {init(next_largest(size));} + + HashTable(const HashTable & other) {copy(other);} + HashTable& operator=(const HashTable & other) {del(); copy(other); return *this;} + ~HashTable() {del();} + iterator begin() {return iterator(table_);} + iterator end() {return iterator(table_end_, table_end_);} + const_iterator begin() const {return const_iterator(table_);} + const_iterator end() const {return const_iterator(table_end_,*table_end_);} + size_type size() const {return size_;} + bool empty() const {return size_ + 1;} + std::pair<iterator,bool> insert(const value_type &); + void erase(iterator); + size_type erase(const key_type &); + void clear() {del(), init(0);} + iterator find(const key_type & to_find) { + bool h; + iterator i = find_i(to_find,h); + return h ? i : end(); + } + bool have(const key_type & to_find) const { + bool h; + const_cast<HashTable *>(this)->find_i(to_find,h); + return h; + } + const_iterator find(const key_type & to_find) const { + return const_cast<HashTable *>(this)->find(to_find); + } + + std::pair<iterator,iterator> equal_range(const key_type & to_find) + { + int irrelevant; + return equal_range_i(to_find, irrelevant); + } + + std::pair<const_iterator,const_iterator> + equal_range(const key_type & to_find) const + { + int irrelevant; + std::pair<iterator,iterator> range + = const_cast<HashTable *>(this)->equal_range_i(to_find, irrelevant); + return std::pair<const_iterator,const_iterator> + (range.first,range.second); + } + + void resize(Size s) {resize_i(next_largest(s));} + + //other niceties: swap, copy, equal + + }; + + template <class V> + inline HT_Iterator<V>::HT_Iterator(const HT_ConstIterator<V> & other) + : t(other.t), n(other.t) + { + while (*n != other.n) n = &(*n)->next; + } + + template <class V> + inline bool operator== (HT_Iterator<V> rhs, + HT_Iterator<V> lhs) + { + return rhs.n == lhs.n; + } + + template <class V> + inline bool operator== (HT_ConstIterator<V> rhs, + HT_Iterator<V> lhs) + { + return rhs.n == *lhs.n; + } + + template <class V> + inline bool operator== (HT_Iterator<V> rhs, + HT_ConstIterator<V> lhs) + { + return *rhs.n == lhs.n; + } + + template <class V> + inline bool operator== (HT_ConstIterator<V> rhs, + HT_ConstIterator<V> lhs) + { + return rhs.n == lhs.n; + } + +#ifndef REL_OPS_POLLUTION + + template <class V> + inline bool operator!= (HT_Iterator<V> rhs, + HT_Iterator<V> lhs) + { + return rhs.n != lhs.n; + } + + template <class V> + inline bool operator!= (HT_ConstIterator<V> rhs, + HT_Iterator<V> lhs) + { + return rhs.n != *lhs.n; + } + + template <class V> + inline bool operator!= (HT_Iterator<V> rhs, + HT_ConstIterator<V> lhs) + { + return *rhs.n != lhs.n; + } + + template <class V> + inline bool operator!= (HT_ConstIterator<V> rhs, + HT_ConstIterator<V> lhs) + { + return rhs.n != lhs.n; + } + +#endif + + template <typename K, typename HF, typename E, bool m> + struct HashSetParms + { + typedef K Value; + typedef const K Key; + static const bool is_multi = m; + HF hash; + E equal; + const K & key(const K & v) {return v;} + HashSetParms(const HF & h = HF(), const E & e = E()) : hash(h), equal(e) {} + }; + + template <typename K, typename HF = hash<K>, typename E = std::equal_to<K> > + class hash_set : public HashTable<HashSetParms<K,HF,E,false> > + { + public: + typedef HashTable<HashSetParms<K,HF,E,false> > Base; + typedef typename Base::size_type size_type; + typedef typename Base::Parms Parms; + hash_set(size_type s = 0, const HF & h = HF(), const E & e = E()) + : Base(s, Parms(h,e)) {} + }; + + template <typename K, typename HF = hash<K>, typename E = std::equal_to<K> > + class hash_multiset : public HashTable<HashSetParms<K,HF,E,true> > + { + public: + typedef HashTable<HashSetParms<K,HF,E,true> > Base; + typedef typename Base::size_type size_type; + typedef typename Base::Parms Parms; + hash_multiset(size_type s = 0, const HF & h = HF(), const E & e = E()) + : Base(s, Parms(h,e)) {} + }; + + template <typename K, typename V, typename HF, typename E, bool m> + struct HashMapParms + { + typedef std::pair<const K,V> Value; + typedef const K Key; + static const bool is_multi = m; + HF hash; + E equal; + const K & key(const Value & v) {return v.first;} + HashMapParms() {} + HashMapParms(const HF & h) : hash(h) {} + HashMapParms(const HF & h, const E & e) : hash(h), equal(e) {} + }; + + template <typename K, typename V, typename HF = hash<K>, typename E = std::equal_to<K> > + class hash_map : public HashTable<HashMapParms<K,V,HF,E,false> > + { + public: + typedef V data_type; + typedef data_type Data; + + typedef HashTable<HashMapParms<K,V,HF,E,false> > Base; + typedef typename Base::size_type size_type; + typedef typename Base::key_type key_type; + typedef typename Base::value_type value_type; + typedef typename Base::Parms Parms; + + hash_map(size_type s = 0, const HF & h = HF(), const E & e = E()) + : Base(s, Parms(h,e)) {} + data_type & operator[](const key_type & k) + { + return (*((this->insert(value_type(k, data_type()))).first)).second; + } + }; + + template <typename K, typename V, typename HF = hash<K>, typename E = std::equal_to<K> > + class hash_multimap : public HashTable<HashMapParms<K,V,HF,E,true> > + { + public: + typedef HashTable<HashMapParms<K,V,HF,E,true> > Base; + typedef typename Base::size_type size_type; + typedef typename Base::Parms Parms; + hash_multimap(size_type s = 0, const HF & h = HF(), const E & e = E()) + : Base(s, Parms(h,e)) {} + }; +} + +#endif diff --git a/jni/common/hash_fun.hpp b/jni/common/hash_fun.hpp new file mode 100644 index 0000000..1c4b247 --- /dev/null +++ b/jni/common/hash_fun.hpp @@ -0,0 +1,53 @@ +// Copyright (c) 2001 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef acommon_hash_fun__hpp +#define acommon_hash_fun__hpp + +namespace acommon { + + template <typename K> struct hash {}; + + template <> struct hash<char> {unsigned long operator()(char v) const {return v;}}; + template <> struct hash<short> {unsigned long operator()(short v) const {return v;}}; + template <> struct hash<int> {unsigned long operator()(int v) const {return v;}}; + template <> struct hash<long> {unsigned long operator()(long v) const {return v;}}; + template <> struct hash<unsigned char> {unsigned long operator()(unsigned char v) const {return v;}}; + template <> struct hash<unsigned short> {unsigned long operator()(unsigned short v) const {return v;}}; + template <> struct hash<unsigned int> {unsigned long operator()(unsigned int v) const {return v;}}; + template <> struct hash<unsigned long> {unsigned long operator()(unsigned long v) const {return v;}}; + + template <> struct hash<const char *> { + inline unsigned long operator() (const char * s) const { + unsigned long h = 0; + for (; *s; ++s) + h=5*h + *s; + return h; + } + }; + + template<class Str> + struct HashString { + inline unsigned long operator() (const Str &str) const { + unsigned long h = 0; + typename Str::const_iterator end = str.end(); + for (typename Str::const_iterator s = str.begin(); + s != end; + ++s) + h=5*h + *s; + return h; + } + }; + +} + +#endif diff --git a/jni/common/indiv_filter.hpp b/jni/common/indiv_filter.hpp new file mode 100644 index 0000000..2898c2e --- /dev/null +++ b/jni/common/indiv_filter.hpp @@ -0,0 +1,100 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ACOMMON_FILTER__HPP +#define ACOMMON_FILTER__HPP + +#include <assert.h> + +#include "string.hpp" +#include "posib_err.hpp" +#include "filter_char.hpp" + +namespace acommon { + + class Config; + + class FilterHandle { + public: + FilterHandle() : handle(0) {} + ~FilterHandle(); + void * release() { + void * tmp = handle; + handle = NULL; + return tmp; + } + operator bool() {return handle != NULL;} + void * get() {return handle;} + + // The direct interface usually when new_filter ... functions are coded + // manually + FilterHandle & operator= (void * h) { + assert(handle == NULL); + handle = h; + return *this; + } + private: + FilterHandle(const FilterHandle &); + void operator = (const FilterHandle &); + void * handle; + }; + + class IndividualFilter { + public: + + // sets up the filter + // + // any options effecting this filter should start with the filter + // name followed by a dash + // should return true if the filter should be used false otherwise + // (in which case it will be deleted) + virtual PosibErr<bool> setup(Config *) = 0; + + // reset the internal state of the filter + // + // should be called whenever a new document is being filtered + virtual void reset() = 0; + + // process the string + // + // The filter may either modify the string passed in or use its + // own buffer for the output. If the string uses its own buffer + // start and stop should be set to the beginning and one past the + // end of its buffer respectfully. + // + // The string passed in should only be split on white space + // characters. Furthermore, between calls to reset, each string + // should be passed in exactly once and in the order they appeared + // in the document. Passing in stings out of order, skipping + // strings or passing them in more than once may lead to undefined + // results. + // + // The following properties are guaranteed to be true and must + // stay true: + // *stop == '\0'; + // strlen == stop - start; + // this way it is always safe to look one character ahead. + // + virtual void process(FilterChar * & start, FilterChar * & stop) = 0; + + virtual ~IndividualFilter() {} + + const char * name() const {return name_.str();} + double order_num() const {return order_num_;} + + FilterHandle handle; + + protected: + + IndividualFilter() : name_(0), order_num_(0.50) {} + + String name_; // must consist of 'a-z|0-9' + double order_num_; // between 0 and 1 exclusive + }; + +} + +#endif diff --git a/jni/common/info.cpp b/jni/common/info.cpp new file mode 100644 index 0000000..8291cc7 --- /dev/null +++ b/jni/common/info.cpp @@ -0,0 +1,781 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include <stdlib.h> +#include <assert.h> +#include <string.h> +#include <ctype.h> +#include <dirent.h> + +// POSIX includes +#ifdef __bsdi__ + /* BSDi defines u_intXX_t types in machine/types.h */ +#include <machine/types.h> +#endif +#ifdef WIN32 +# include <windows.h> +# include <winbase.h> +#endif + +#include "iostream.hpp" + +#include "asc_ctype.hpp" +#include "config.hpp" +#include "errors.hpp" +#include "fstream.hpp" +#include "getdata.hpp" +#include "info.hpp" +#include "itemize.hpp" +#include "string.hpp" +#include "string_list.hpp" +#include "vector.hpp" +#include "stack_ptr.hpp" +#include "strtonum.hpp" +#include "lock.hpp" +#include "string_map.hpp" + +#include "gettext.h" + +namespace acommon { + + class Dir { + DIR * d_; + Dir(const Dir &); + Dir & operator=(const Dir &); + public: + operator DIR * () {return d_;} + Dir(DIR * d) : d_(d) {} + ~Dir() {if (d_) closedir(d_);} + }; + + ///////////////////////////////////////////////////////////////// + // + // Lists of Info Lists + // + + static void get_data_dirs (Config *, + StringList &); + + struct DictExt + { + static const size_t max_ext_size = 15; + const ModuleInfo * module; + size_t ext_size; + char ext[max_ext_size + 1]; + DictExt(ModuleInfo * m, const char * e); + }; + + typedef Vector<DictExt> DictExtList; + + struct MDInfoListAll + // this is in an invalid state if some of the lists + // has data but others don't + { + StringList key; + StringList for_dirs; + ModuleInfoList module_info_list; + StringList dict_dirs; + DictExtList dict_exts; + DictInfoList dict_info_list; + StringMap dict_aliases; + void clear(); + PosibErr<void> fill(Config *, StringList &); + bool has_data() const {return module_info_list.head_ != 0;} + void fill_helper_lists(const StringList &); + PosibErr<void> fill_dict_aliases(Config *); + }; + + class MDInfoListofLists + { + Mutex lock; + + MDInfoListAll * data; + + int offset; + int size; + + int valid_pos(int pos) {return offset <= pos && pos < size + offset;} + + void clear(Config * c); + int find(const StringList &); + + public: + + MDInfoListofLists(); + ~MDInfoListofLists(); + + PosibErr<const MDInfoListAll *> get_lists(Config * c); + + void flush() {} // unimplemented + }; + + static MDInfoListofLists md_info_list_of_lists; + + ///////////////////////////////////////////////////////////////// + // + // Utility functions declaration + // + + static const char * strnchr(const char * i, char c, unsigned int size); + static const char * strnrchr(const char * stop, char c, unsigned int size); + + ///////////////////////////////////////////////////////////////// + // + // Built in modules + // + + struct ModuleInfoDefItem { + const char * name; + const char * data; + }; + + static const ModuleInfoDefItem module_info_list_def_list[] = { + {"default", + "order-num 0.50;" + "dict-exts .multi,.alias"} + }; + + ///////////////////////////////////////////////////////////////// + // + // ModuleInfoList Impl + // + + struct ModuleInfoNode + { + ModuleInfo c_struct; + ModuleInfoNode * next; + ModuleInfoNode(ModuleInfoNode * n = 0) : next(n) {} + String name; + String lib_dir; + StringList dict_exts; + StringList dict_dirs; + }; + + void ModuleInfoList::clear() + { + while (head_ != 0) { + ModuleInfoNode * to_del = head_; + head_ = head_->next; + delete to_del; + } + } + + PosibErr<void> ModuleInfoList::fill(MDInfoListAll & list_all, + Config * config) + { + const ModuleInfoDefItem * i = module_info_list_def_list; + const ModuleInfoDefItem * end = module_info_list_def_list + + sizeof(module_info_list_def_list)/sizeof(ModuleInfoDefItem); + for (; i != end; ++i) + { + StringIStream in(i->data); + proc_info(list_all, config, i->name, strlen(i->name), in); + } + + StringListEnumeration els = list_all.for_dirs.elements_obj(); + const char * dir; + while ( (dir = els.next()) != 0) { + Dir d(opendir(dir)); + if (d==0) continue; + + struct dirent * entry; + while ( (entry = readdir(d)) != 0) { + const char * name = entry->d_name; + const char * dot_loc = strrchr(name, '.'); + unsigned int name_size = dot_loc == 0 ? strlen(name) : dot_loc - name; + + // check if it ends in suffix + if (strcmp(name + name_size, ".asmi") != 0) + continue; + + String path; + path += dir; + path += '/'; + path += name; + FStream in; + RET_ON_ERR(in.open(path, "r")); + RET_ON_ERR(proc_info(list_all, config, name, name_size, in)); + } + } + return no_err; + } + + PosibErr<void> ModuleInfoList::proc_info(MDInfoListAll &, + Config * config, + const char * name, + unsigned int name_size, + IStream & in) + { + ModuleInfoNode * * prev = &head_; + ModuleInfoNode * to_add = new ModuleInfoNode(); + to_add->c_struct.name = 0; + to_add->c_struct.order_num = -1; + to_add->c_struct.lib_dir = 0; + to_add->c_struct.dict_dirs = 0; + + to_add->name.assign(name, name_size); + to_add->c_struct.name = to_add->name.c_str(); + + PosibErr<void> err; + + String buf; DataPair d; + while (getdata_pair(in, d, buf)) { + if (d.key == "order-num") { + to_add->c_struct.order_num = strtod_c(d.value.str, NULL); + if (!(0 < to_add->c_struct.order_num && + to_add->c_struct.order_num < 1)) + { + err.prim_err(bad_value, d.key, d.value, + _("a number between 0 and 1")); + goto RETURN_ERROR; + } + } else if (d.key == "lib-dir") { + to_add->lib_dir = d.value.str; + to_add->c_struct.lib_dir = to_add->lib_dir.c_str(); + } else if (d.key == "dict-dir" || d.key == "dict-dirs") { + to_add->c_struct.dict_dirs = &(to_add->dict_dirs); + itemize(d.value, to_add->dict_dirs); + } else if (d.key == "dict-exts") { + to_add->c_struct.dict_dirs = &(to_add->dict_exts); + itemize(d.value, to_add->dict_exts); + } else { + err.prim_err(unknown_key, d.key); + goto RETURN_ERROR; + } + } + + while (*prev != 0 && + (*prev)->c_struct.order_num < to_add->c_struct.order_num) + prev = &(*prev)->next; + to_add->next = *prev; + *prev = to_add; + return err; + + RETURN_ERROR: + delete to_add; + return err; + } + + ModuleInfoNode * ModuleInfoList::find(const char * to_find, + unsigned int to_find_len) + { + for (ModuleInfoNode * n = head_; + n != 0; + n = n->next) + { + if (n->name.size() == to_find_len + && strncmp(n->name.c_str(), to_find, to_find_len) == 0) return n; + } + return 0; + } + + ///////////////////////////////////////////////////////////////// + // + // DictInfoList Impl + // + + struct DictInfoNode + { + DictInfo c_struct; + DictInfoNode * next; + DictInfoNode(DictInfoNode * n = 0) : next(n) {} + String name; + String code; + String variety; + String size_str; + String info_file; + bool direct; + }; + + bool operator< (const DictInfoNode & r, const DictInfoNode & l); + + void DictInfoList::clear() + { + while (head_ != 0) { + DictInfoNode * to_del = head_; + head_ = head_->next; + delete to_del; + } + } + + const DictExt * find_dict_ext(const DictExtList & l, ParmStr name) + { + DictExtList::const_iterator i = l.begin(); + DictExtList::const_iterator end = l.end(); + for (; i != end; ++i) + { + if (i->ext_size <= name.size() + && strncmp(name + (name.size() - i->ext_size), + i->ext, i->ext_size) == 0) + break; + } + + if (i == end) // does not end in one of the extensions in list + return 0; + else + return &*i; + } + + + PosibErr<void> DictInfoList::fill(MDInfoListAll & list_all, + Config * config) + { + StringList aliases; + config->retrieve_list("dict-alias", &aliases); + StringListEnumeration els = aliases.elements_obj(); + const char * str; + while ( (str = els.next()) != 0) { + const char * end = strchr(str, ' '); + assert(end != 0); // FIXME: Return error + String name(str, end - str); + RET_ON_ERR(proc_file(list_all, config, + 0, name.str(), name.size(), + find_dict_ext(list_all.dict_exts, ".alias")->module)); + } + + els = list_all.dict_dirs.elements_obj(); + const char * dir; + while ( (dir = els.next()) != 0) { + Dir d(opendir(dir)); + if (d==0) continue; + + struct dirent * entry; + while ( (entry = readdir(d)) != 0) { + const char * name = entry->d_name; + unsigned int name_size = strlen(name); + + const DictExt * i = find_dict_ext(list_all.dict_exts, + ParmString(name, name_size)); + if (i == 0) // does not end in one of the extensions in list + continue; + + name_size -= i->ext_size; + + RET_ON_ERR(proc_file(list_all, config, + dir, name, name_size, i->module)); + } + } + return no_err; + } + + PosibErr<void> DictInfoList::proc_file(MDInfoListAll & list_all, + Config * config, + const char * dir, + const char * name, + unsigned int name_size, + const ModuleInfo * module) + { + DictInfoNode * * prev = &head_; + StackPtr<DictInfoNode> to_add(new DictInfoNode()); + const char * p0; + const char * p1; + const char * p2; + p0 = strnchr(name, '-', name_size); + if (!module) + p2 = strnrchr(name, '-', name_size); + else + p2 = name + name_size; + if (p0 == 0) + p0 = p2; + p1 = p2; + if (p0 + 2 < p1 && asc_isdigit(p1[-1]) && asc_isdigit(p1[-2]) && p1[-3] == '-') + p1 -= 2; + + to_add->name.assign(name, p2-name); + to_add->c_struct.name = to_add->name.c_str(); + + to_add->code.assign(name, p0-name); + to_add->c_struct.code = to_add->code.c_str(); + + // check if the code is in a valid form and normalize entry. + // If its not in a valid form than ignore this entry + + if (to_add->code.size() >= 2 + && asc_isalpha(to_add->code[0]) && asc_isalpha(to_add->code[1])) + { + unsigned s = strcspn(to_add->code.str(), "_"); + if (s > 3) return no_err; + unsigned i = 0; + for (; i != s; ++i) + to_add->name[i] = to_add->code[i] = asc_tolower(to_add->code[i]); + i++; + for (; i < to_add->code.size(); ++i) + to_add->name[i] = to_add->code[i] = asc_toupper(to_add->code[i]); + } else { + return no_err; + } + + // Need to do it here as module is about to get a value + // if it is null + to_add->direct = module == 0 ? false : true; + + if (!module) { + assert(p2 != 0); //FIXME: return error + ModuleInfoNode * mod + = list_all.module_info_list.find(p2+1, name_size - (p2+1-name)); + //FIXME: Check for null and return an error on an unknown module + module = &(mod->c_struct); + } + to_add->c_struct.module = module; + + if (p0 + 1 < p1) + to_add->variety.assign(p0+1, p1 - p0 - 1); + to_add->c_struct.variety = to_add->variety.c_str(); + + if (p1 != p2) + to_add->size_str.assign(p1, 2); + else + to_add->size_str = "60"; + to_add->c_struct.size_str = to_add->size_str.c_str(); + to_add->c_struct.size = atoi(to_add->c_struct.size_str); + + if (dir) { + to_add->info_file = dir; + to_add->info_file += '/'; + } + to_add->info_file += name; + + while (*prev != 0 && *(DictInfoNode *)*prev < *to_add) + prev = &(*prev)->next; + to_add->next = *prev; + *prev = to_add.release(); + + return no_err; + } + + bool operator< (const DictInfoNode & r, const DictInfoNode & l) + { + const DictInfo & rhs = r.c_struct; + const DictInfo & lhs = l.c_struct; + int res = strcmp(rhs.code, lhs.code); + if (res < 0) return true; + if (res > 0) return false; + res = strcmp(rhs.variety,lhs.variety); + if (res < 0) return true; + if (res > 0) return false; + if (rhs.size < lhs.size) return true; + if (rhs.size > lhs.size) return false; + res = strcmp(rhs.module->name,lhs.module->name); + if (res < 0) return true; + return false; + } + + PosibErr<void> get_dict_file_name(const DictInfo * mi, + String & main_wl, String & flags) + { + const DictInfoNode * node = reinterpret_cast<const DictInfoNode *>(mi); + if (node->direct) { + main_wl = node->info_file; + flags = ""; + return no_err; + } else { + FStream f; + RET_ON_ERR(f.open(node->info_file, "r")); + String buf; DataPair dp; + bool res = getdata_pair(f, dp, buf); + main_wl = dp.key; flags = dp.value; + f.close(); + if (!res) + return make_err(bad_file_format, node->info_file, ""); + return no_err; + } + } + + ///////////////////////////////////////////////////////////////// + // + // Lists of Info Lists Impl + // + + void get_data_dirs (Config * config, + StringList & lst) + { + lst.clear(); + lst.add(config->retrieve("data-dir")); + lst.add(config->retrieve("dict-dir")); + } + + DictExt::DictExt(ModuleInfo * m, const char * e) + { + module = m; + ext_size = strlen(e); + assert(ext_size <= max_ext_size); + memcpy(ext, e, ext_size + 1); + } + + void MDInfoListAll::clear() + { + module_info_list.clear(); + dict_dirs.clear(); + dict_exts.clear(); + dict_info_list.clear(); + } + + PosibErr<void> MDInfoListAll::fill(Config * c, + StringList & dirs) + { + PosibErr<void> err; + + err = fill_dict_aliases(c); + if (err.has_err()) goto RETURN_ERROR; + + for_dirs = dirs; + err = module_info_list.fill(*this, c); + if (err.has_err()) goto RETURN_ERROR; + + fill_helper_lists(dirs); + err = dict_info_list.fill(*this, c); + if (err.has_err()) goto RETURN_ERROR; + + return err; + + RETURN_ERROR: + clear(); + return err; + } + + void MDInfoListAll::fill_helper_lists(const StringList & def_dirs) + { + dict_dirs = def_dirs; + dict_exts.append(DictExt(0, ".awli")); + + for (ModuleInfoNode * n = module_info_list.head_; n != 0; n = n->next) + { + { + StringListEnumeration e = n->dict_dirs.elements_obj(); + const char * item; + while ( (item = e.next()) != 0 ) + dict_dirs.add(item); + }{ + StringListEnumeration e = n->dict_exts.elements_obj(); + const char * item; + while ( (item = e.next()) != 0 ) + dict_exts.append(DictExt(&n->c_struct, item)); + } + } + } + + PosibErr<void> MDInfoListAll::fill_dict_aliases(Config * c) + { + StringList aliases; + c->retrieve_list("dict-alias", &aliases); + StringListEnumeration els = aliases.elements_obj(); + const char * str; + while ( (str = els.next()) != 0) { + const char * end = strchr(str, ' '); + if (!end) return make_err(bad_value, "dict-alias", str, + _("in the form \"<name> <value>\"")); + String name(str, end - str); + while (asc_isspace(*end)) ++end; + dict_aliases.insert(name.str(), end); + } + return no_err; + } + + + MDInfoListofLists::MDInfoListofLists() + : data(0), offset(0), size(0) + { + } + + MDInfoListofLists::~MDInfoListofLists() { + for (int i = offset; i != offset + size; ++i) + data[i].clear(); + delete[] data; + } + + void MDInfoListofLists::clear(Config * c) + { + StringList dirs; + get_data_dirs(c, dirs); + int pos = find(dirs); + if (pos == -1) { + data[pos - offset].clear(); + } + } + + int MDInfoListofLists::find(const StringList & key) + { + for (int i = 0; i != size; ++i) { + if (data[i].key == key) + return i + offset; + } + return -1; + } + + PosibErr<const MDInfoListAll *> + MDInfoListofLists::get_lists(Config * c) + { + LOCK(&lock); + Config * config = (Config *)c; // FIXME: WHY? + int & pos = config->md_info_list_index; + StringList dirs; + StringList key; + if (!valid_pos(pos)) { + get_data_dirs(config, dirs); + key = dirs; + key.add("////////"); + config->retrieve_list("dict-alias", &key); + pos = find(key); + } + if (!valid_pos(pos)) { + MDInfoListAll * new_data = new MDInfoListAll[size + 1]; + for (int i = 0; i != size; ++i) { + new_data[i] = data[i]; + } + ++size; + delete[] data; + data = new_data; + pos = size - 1 + offset; + } + MDInfoListAll & list_all = data[pos - offset]; + if (list_all.has_data()) + return &list_all; + + list_all.key = key; + RET_ON_ERR(list_all.fill(config, dirs)); + + return &list_all; + } + + ///////////////////////////////////////////////////////////////// + // + // utility functions + // + + static const char * strnchr(const char * i, char c, unsigned int size) + { + const char * stop = i + size; + while (i != stop) { + if (*i == c) + return i; + ++i; + } + return 0; + } + + static const char * strnrchr(const char * stop, char c, unsigned int size) + { + const char * i = stop + size - 1; + --stop; + while (i != stop) { + if (*i == c) + return i; + --i; + } + return 0; + } + + ///////////////////////////////////////////////////////////////// + // + // user visible functions and enumeration impl + // + + // + // ModuleInfo + // + + const ModuleInfoList * get_module_info_list(Config * c) + { + const MDInfoListAll * la = md_info_list_of_lists.get_lists(c); + if (la == 0) return 0; + else return &la->module_info_list; + } + + ModuleInfoEnumeration * ModuleInfoList::elements() const + { + return new ModuleInfoEnumeration((ModuleInfoNode *)head_); + } + + unsigned int ModuleInfoList::size() const + { + return size_; + } + + bool ModuleInfoList::empty() const + { + return size_ != 0; + } + + ModuleInfoEnumeration * ModuleInfoEnumeration::clone () const + { + return new ModuleInfoEnumeration(*this); + } + + void ModuleInfoEnumeration::assign(const ModuleInfoEnumeration * other) + { + *this = *other; + } + + bool ModuleInfoEnumeration::at_end () const + { + return node_ == 0; + } + + const ModuleInfo * ModuleInfoEnumeration::next () + { + if (node_ == 0) return 0; + const ModuleInfo * data = &(node_->c_struct); + node_ = (ModuleInfoNode *)(node_->next); + return data; + } + + // + // DictInfo + // + + const DictInfoList * get_dict_info_list(Config * c) + { + const MDInfoListAll * la = md_info_list_of_lists.get_lists(c); + if (la == 0) return 0; + else return &la->dict_info_list; + } + + const StringMap * get_dict_aliases(Config * c) + { + const MDInfoListAll * la = md_info_list_of_lists.get_lists(c); + if (la == 0) return 0; + else return &la->dict_aliases; + } + + DictInfoEnumeration * DictInfoList::elements() const + { + return new DictInfoEnumeration(static_cast<DictInfoNode *>(head_)); + } + + unsigned int DictInfoList::size() const + { + return size_; + } + + bool DictInfoList::empty() const + { + return size_ != 0; + } + + DictInfoEnumeration * DictInfoEnumeration::clone() const + { + return new DictInfoEnumeration(*this); + } + + void DictInfoEnumeration::assign(const DictInfoEnumeration * other) + { + *this = *other; + } + + bool DictInfoEnumeration::at_end() const + { + return node_ == 0; + } + + const DictInfo * DictInfoEnumeration::next () + { + if (node_ == 0) return 0; + const DictInfo * data = &(node_->c_struct); + node_ = (DictInfoNode *)(node_->next); + return data; + } + +} diff --git a/jni/common/info.hpp b/jni/common/info.hpp new file mode 100644 index 0000000..59f986f --- /dev/null +++ b/jni/common/info.hpp @@ -0,0 +1,147 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_INFO__HPP +#define ASPELL_INFO__HPP + +#include "posib_err.hpp" +#include "type_id.hpp" + +namespace acommon { + + typedef int c_boolean; + + class Config; + struct DictInfo; + class DictInfoEnumeration; + class DictInfoList; + struct ModuleInfo; + class ModuleInfoEnumeration; + class ModuleInfoList; + class StringList; + struct StringListImpl; + class FStream; + class StringMap; + + struct ModuleInfo { + const char * name; + double order_num; + const char * lib_dir; + StringList * dict_exts; + StringList * dict_dirs; + }; + + PosibErr<void> get_dict_file_name(const DictInfo *, + String & main_wl, String & flags); + + struct DictInfo { + const char * name; + const char * code; + const char * variety; + int size; + const char * size_str; + const ModuleInfo * module; + }; + + struct MDInfoListAll; + + struct ModuleInfoNode; + + class ModuleInfoList { + public: + ModuleInfoList() : size_(0), head_(0) {} + void clear(); + PosibErr<void> fill(MDInfoListAll &, Config *); + bool empty() const; + unsigned int size() const; + ModuleInfoEnumeration * elements() const; + PosibErr<void> proc_info(MDInfoListAll &, + Config *, + const char * name, + unsigned int name_size, + IStream &); + ModuleInfoNode * find(const char * to_find, + unsigned int to_find_len); + public: // but don't use + unsigned int size_; + ModuleInfoNode * head_; + }; + + const ModuleInfoList * get_module_info_list(Config *); + + struct DictInfoNode; + + class DictInfoList { + public: + DictInfoList() : size_(0), head_(0) {} + void clear(); + PosibErr<void> fill(MDInfoListAll &, Config *); + bool empty() const; + unsigned int size() const; + DictInfoEnumeration * elements() const; + PosibErr<void> proc_file(MDInfoListAll &, + Config *, + const char * dir, + const char * name, + unsigned int name_size, + const ModuleInfo *); + public: // but don't use + unsigned int size_; + DictInfoNode * head_; + }; + + const DictInfoList * get_dict_info_list(Config *); + + const StringMap * get_dict_aliases(Config *); + + class ModuleInfoEnumeration { + public: + typedef const ModuleInfo * Value; + + const ModuleInfoNode * node_; + ModuleInfoEnumeration(const ModuleInfoNode * n) : node_(n) {} + + bool at_end() const; + const ModuleInfo * next(); + int ref_count_; + TypeId type_id_; + unsigned int type_id() { return type_id_.num; } + int copyable_; + int copyable() { return copyable_; } + ModuleInfoEnumeration * clone() const; + void assign(const ModuleInfoEnumeration * other); + ModuleInfoEnumeration() : ref_count_(0), copyable_(2) {} + virtual ~ModuleInfoEnumeration() {} + }; + + struct DictInfoNode; + + class DictInfoEnumeration { + public: + const DictInfoNode * node_; + DictInfoEnumeration(const DictInfoNode * n) : node_(n) {} + + typedef const DictInfo * Value; + + bool at_end() const; + const DictInfo * next(); + int ref_count_; + TypeId type_id_; + unsigned int type_id() { return type_id_.num; } + int copyable_; + int copyable() { return copyable_; } + DictInfoEnumeration * clone() const; + void assign(const DictInfoEnumeration * other); + DictInfoEnumeration() : ref_count_(0), copyable_(2) {} + virtual ~DictInfoEnumeration() {} + }; + + + + +} + +#endif /* ASPELL_INFO__HPP */ diff --git a/jni/common/info.lo b/jni/common/info.lo new file mode 100644 index 0000000..8c1f08c --- /dev/null +++ b/jni/common/info.lo @@ -0,0 +1,12 @@ +# common/info.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/info.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/iostream.cpp b/jni/common/iostream.cpp new file mode 100644 index 0000000..f0fc3e5 --- /dev/null +++ b/jni/common/iostream.cpp @@ -0,0 +1,13 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "iostream.hpp" + +namespace acommon { + FStream CIN(stdin, false); + FStream COUT(stdout, false); + FStream CERR(stderr, false); +} diff --git a/jni/common/iostream.hpp b/jni/common/iostream.hpp new file mode 100644 index 0000000..5937f0f --- /dev/null +++ b/jni/common/iostream.hpp @@ -0,0 +1,24 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_IOSTREAM__HPP +#define ASPELL_IOSTREAM__HPP + +#include "fstream.hpp" + +namespace acommon { + + // These streams for the time being will be based on stdin, stdout, + // and stderr respectfully. So it is safe to use the standard C + // functions. It is also safe to assume that modifications to the + // state of the standard streams will effect these. + + extern FStream CIN; + extern FStream COUT; + extern FStream CERR; +} + +#endif diff --git a/jni/common/iostream.lo b/jni/common/iostream.lo new file mode 100644 index 0000000..21c4edb --- /dev/null +++ b/jni/common/iostream.lo @@ -0,0 +1,12 @@ +# common/iostream.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/iostream.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/istream.hpp b/jni/common/istream.hpp new file mode 100644 index 0000000..e3c9d0d --- /dev/null +++ b/jni/common/istream.hpp @@ -0,0 +1,35 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_ISTREAM__HPP +#define ASPELL_ISTREAM__HPP + +namespace acommon { + + class String; + + class IStream { + private: + char delem; + public: + IStream(char d = '\n') : delem(d) {} + + char delim() const {return delem;} + + // getline will read until delem + virtual bool append_line(String &, char c) = 0; + bool append_line(String & str) {return append_line(str, delem);} + bool getline(String & str, char c); + bool getline(String & str); + + virtual bool read(void *, unsigned int) = 0; + + virtual ~IStream() {} + }; + +} + +#endif diff --git a/jni/common/itemize.cpp b/jni/common/itemize.cpp new file mode 100644 index 0000000..2abc848 --- /dev/null +++ b/jni/common/itemize.cpp @@ -0,0 +1,106 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include <string.h> +#include <stdlib.h> + +#include "asc_ctype.hpp" +#include "itemize.hpp" +#include "mutable_container.hpp" +#include <stdio.h> +#include <cstdio> + +//FIXME: it should be possible to escape ',' '+' '-' '!' so that they can +// appear in values +// If '\' is used than what about when the option file is parsed +// as it strips away all '\' escapes. + +namespace acommon { + + struct ItemizeItem { + char action; + const char * name; + ItemizeItem() : action('\0'), name(0) {} + }; + + class ItemizeTokenizer { + private: + char * list; + char * i; + public: + ItemizeTokenizer(const char * l); + ~ItemizeTokenizer(); + private: + ItemizeTokenizer(const ItemizeTokenizer & other) ; + ItemizeTokenizer & operator=(const ItemizeTokenizer & other); + public: + ItemizeItem next(); + }; + + ItemizeTokenizer::ItemizeTokenizer(const char * l) + { + size_t size = strlen(l) + 1; + list = new char[size]; + i = list; + strncpy(list, l, size); + } + + ItemizeTokenizer::~ItemizeTokenizer() + { + delete[] list; + } + + + ItemizeItem ItemizeTokenizer::next() + { + ItemizeItem li; + while (*i != '\0' && (asc_isspace(*i) || *i == ',')) ++i; + if (*i == '\0') return li; + li.action = *i; + if (*i == '+' || *i == '-') { + ++i; + } else if (*i == '!') { + li.name = ""; + ++i; + return li; + } else { + li.action = '+'; + } + while (*i != '\0' && *i != ',' && asc_isspace(*i)) ++i; + if (*i == '\0' || *i == ',') return next(); + li.name = i; + while (*i != '\0' && *i != ',') ++i; + while (i != list && asc_isspace(*(i-1))) --i; + if (*i != '\0') { + *i = '\0'; + ++i; + } + return li; + } + + + PosibErr<void> itemize (ParmString s, MutableContainer & d) { + ItemizeTokenizer els(s); + ItemizeItem li; + while (li = els.next(), li.name != 0) { + switch (li.action) { + case '+': + RET_ON_ERR(d.add(li.name)); + break; + case '-': + RET_ON_ERR(d.remove(li.name)); + break; + case '!': + RET_ON_ERR(d.clear()); + break; + default: + abort(); + } + } + return no_err; + } + +} diff --git a/jni/common/itemize.hpp b/jni/common/itemize.hpp new file mode 100644 index 0000000..7c36576 --- /dev/null +++ b/jni/common/itemize.hpp @@ -0,0 +1,20 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ITEMIZE__HPP +#define ITEMIZE__HPP + +#include "parm_string.hpp" +#include "posib_err.hpp" + +namespace acommon { + + class MutableContainer; + PosibErr<void> itemize(ParmString, MutableContainer &); + +} + +#endif diff --git a/jni/common/itemize.lo b/jni/common/itemize.lo new file mode 100644 index 0000000..763defc --- /dev/null +++ b/jni/common/itemize.lo @@ -0,0 +1,12 @@ +# common/itemize.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/itemize.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/key_info.hpp b/jni/common/key_info.hpp new file mode 100644 index 0000000..f209820 --- /dev/null +++ b/jni/common/key_info.hpp @@ -0,0 +1,30 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_KEY_INFO__HPP +#define ASPELL_KEY_INFO__HPP + +#include "key_info.hpp" + +namespace acommon { + + +enum KeyInfoType {KeyInfoString,KeyInfoInt,KeyInfoBool,KeyInfoList}; +struct KeyInfo { + const char * name; + KeyInfoType type; + const char * def; + const char * desc; + int flags; + int other_data; +}; + + +} + +#endif /* ASPELL_KEY_INFO__HPP */ diff --git a/jni/common/lock.hpp b/jni/common/lock.hpp new file mode 100644 index 0000000..1090f5a --- /dev/null +++ b/jni/common/lock.hpp @@ -0,0 +1,68 @@ +// File: lock.hpp +// +// Copyright (c) 2002,2003,2011 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef DISTRIBNET_LOCK__HPP +#define DISTRIBNET_LOCK__HPP + +#include <assert.h> + +#include "settings.h" + +#ifdef USE_POSIX_MUTEX +# include <pthread.h> +#endif + +namespace acommon { + +#define LOCK(l) const Lock the_lock(l); + +#ifdef USE_POSIX_MUTEX + class Mutex { + pthread_mutex_t l_; + private: + Mutex(const Mutex &); + void operator=(const Mutex &); + public: + Mutex() {pthread_mutex_init(&l_, 0);} + ~Mutex() {pthread_mutex_destroy(&l_);} + void lock() {pthread_mutex_lock(&l_);} + void unlock() {pthread_mutex_unlock(&l_);} + }; +#else + class Mutex { + private: + Mutex(const Mutex &); + void operator=(const Mutex &); + public: + Mutex() {} + ~Mutex() {} + void lock() {} + void unlock() {} + }; +#endif + + class Lock { + private: + Lock(const Lock &); + void operator= (const Lock &); + Mutex * lock_; + public: + Lock(Mutex * l) : lock_(l) {if (lock_) lock_->lock();} + void set(Mutex * l) {assert(!lock_); lock_ = l; if (lock_) lock_->lock();} + void release() {if (lock_) lock_->unlock(); lock_ = NULL;} + ~Lock() {if (lock_) lock_->unlock();} + }; +}; + +#endif diff --git a/jni/common/lsort.hpp b/jni/common/lsort.hpp new file mode 100644 index 0000000..495c999 --- /dev/null +++ b/jni/common/lsort.hpp @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2004 + * Kevin Atkinson + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without + * fee, provided that the above copyright notice appear in all copies + * and that both that copyright notice and this permission notice + * appear in supporting documentation. I make no representations about + * the suitability of this software for any purpose. It is provided + * "as is" without express or implied warranty. + * + * This code was originally adopted from the slist implementation + * found in the SGI STL under the following copyright: + * + * Copyright (c) 1997 + * Silicon Graphics Computer Systems, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Silicon Graphics makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + */ + +#ifndef ACOMMON_LSORT__HPP +#define ACOMMON_LSORT__HPP + +namespace acommon { + +using std::swap; + +template <class N> +struct Next { + N * & operator() (N * n) const {return n->next;} +}; +template <class N> +struct Less { + bool operator() (N * x, N * y) const {return x->data < y->data;} +}; + + +template <class N, class LT, class NX> +static inline N * merge(N * x, N * y, const LT & lt, const NX & nx) +{ + if (lt(y,x)) swap(x,y); + N * first = x; + while (nx(x) && y) { + if (lt(y,nx(x))) { + N * xn = nx(x); + N * yn = nx(y); + nx(x) = y; + nx(y) = xn; + y = yn; + } + x = nx(x); + } + if (y) { + nx(x) = y; + } + return first; +} + +// THIS is SLOWER!!! +// and even slower when condational move is used!!!! +template <class N, class LT, class NX> +static inline N * merge1(N * x, N * y, const LT & lt, const NX & nx) +{ + N * * cur = lt(x,y) ? &x : &y; + N * first = *cur; + N * last = *cur; + *cur = nx(*cur); + while (x && y) { + cur = lt(x,y) ? &x : &y; + nx(last) = *cur; + last = *cur; + *cur = nx(*cur); + } + if (x) {nx(last) = x;} + else if (y) {nx(last) = y;} + return first; +} + +template <class N, class LT> +static inline N * merge(N * x, N * y, const LT & lt) +{ + return sort(x, y, lt, Next<N>()); +} + +template <class N> +static inline N * merge(N * x, N * y) +{ + return sort(x, y, Less<N>(), Next<N>()); +} + +template <class N, class LT, class NX> +N * sort(N * first, const LT & lt, const NX & nx) +{ + if (!first) return first; + + N * carry = 0; + N * counter[sizeof(void *)*8] = {0}; + int fill = 0; + + while (first) { + + N * tmp = nx(first); + nx(first) = carry; + carry = first; + first = tmp; + + int i = 0; + while (i < fill && counter[i]) { + carry = merge(counter[i], carry, lt, nx); + counter[i] = 0; + ++i; + } + + swap(carry, counter[i]); + + if (i == fill) { + ++fill; + } + } + + for (int i = 1; i < fill; ++i) { + if (!counter[i]) counter[i] = counter[i-1]; + else if (counter[i-1]) counter[i] = merge(counter[i], counter[i-1], lt, nx); + } + + return counter[fill-1]; +} + +template <class N, class LT> +static inline N * sort(N * first, const LT & lt) +{ + return sort(first, lt, Next<N>()); +} + +template <class N> +static inline N * sort(N * first) +{ + return sort(first, Less<N>(), Next<N>()); +} + + +template <class N> +static inline N * fix_links(N * cur) +{ + N * prev = 0; + while (cur) { + cur->prev = prev; + prev = cur; + cur = cur->next; + } +} + +} + +#endif + diff --git a/jni/common/mutable_container.hpp b/jni/common/mutable_container.hpp new file mode 100644 index 0000000..27d7b15 --- /dev/null +++ b/jni/common/mutable_container.hpp @@ -0,0 +1,30 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_MUTABLE_CONTAINER__HPP +#define ASPELL_MUTABLE_CONTAINER__HPP + +#include "parm_string.hpp" + +namespace acommon { + +class AddableContainer { +public: + virtual PosibErr<bool> add(ParmStr to_add) = 0; + virtual ~AddableContainer() {} +}; + + +class MutableContainer : public AddableContainer { +public: + virtual PosibErr<bool> remove(ParmStr to_rem) = 0; + virtual PosibErr<void> clear() = 0; +}; + + +} + +#endif /* ASPELL_MUTABLE_CONTAINER__HPP */ diff --git a/jni/common/mutable_string.hpp b/jni/common/mutable_string.hpp new file mode 100644 index 0000000..bbbf829 --- /dev/null +++ b/jni/common/mutable_string.hpp @@ -0,0 +1,76 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_MUTABLE_STRING__HPP +#define ASPELL_MUTABLE_STRING__HPP + +#include <string.h> + +#include "parm_string.hpp" + +namespace acommon { + + struct MutableString { + char * str; + unsigned int size; + + MutableString() : str(0), size(0) {} + MutableString(char * str0) : str(str0), size(strlen(str)) {} + MutableString(char * str0, unsigned int sz) : str(str0), size(sz) {} + + bool empty() const {return size == 0;} + operator char * () const {return str;} + operator ParmString () const {return ParmString(str, size);} + char * begin() const {return str;} + char * end() const {return str + size;} + }; + + static inline bool operator==(MutableString s1, MutableString s2) + { + if (s1.size != s2.size) + return false; + else + return memcmp(s1,s2,s1.size) == 0; + } + static inline bool operator==(const char * s1, MutableString s2) + { + if ( s1 == NULL ) { + return s2.size == 0; + } + return strcmp(s1,s2) == 0; + } + static inline bool operator==(MutableString s1, const char * s2) + { + if ( s2 == NULL ) { + return s1.size == 0; + } + return strcmp(s1,s2) == 0; + } + + static inline bool operator!=(MutableString s1, MutableString s2) + { + if (s1.size != s2.size) + return true; + else + return memcmp(s1,s2,s1.size) != 0; + } + static inline bool operator!=(const char * s1, MutableString s2) + { + if ( s1 == NULL ) { + return s2.size != 0; + } + return strcmp(s1,s2) != 0; + } + static inline bool operator!=(MutableString s1, const char * s2) + { + if ( s2 == NULL ) { + return s1.size != 0; + } + return strcmp(s1,s2) != 0; + } +} + +#endif diff --git a/jni/common/ndebug.hpp b/jni/common/ndebug.hpp new file mode 100644 index 0000000..aee7a5c --- /dev/null +++ b/jni/common/ndebug.hpp @@ -0,0 +1,8 @@ +#ifndef NDEBUG__HPP +#define NDEBUG__HPP + +#ifdef NDEBUG +#warning "Binaries compiled with NDEBUG defined are unsupported see http://aspell.net/ndebug.html." +#endif + +#endif diff --git a/jni/common/objstack.cpp b/jni/common/objstack.cpp new file mode 100644 index 0000000..b33c0a5 --- /dev/null +++ b/jni/common/objstack.cpp @@ -0,0 +1,80 @@ + +#include "objstack.hpp" + +namespace acommon { + +using namespace std; + +void ObjStack::setup_chunk() +{ + bottom = first_free->data; + align_bottom(min_align); + top = (byte *)first_free + chunk_size; + align_top(min_align); +} + + +ObjStack::ObjStack(size_t chunk_s, size_t align) + : chunk_size(chunk_s), min_align(align), temp_end(0) +{ + first_free = first = (Node *)malloc(chunk_size); + first->next = 0; + reserve = 0; + setup_chunk(); +} + +ObjStack::~ObjStack() +{ + while (first) { + Node * tmp = first->next; + free(first); + first = tmp; + } + trim(); +} + +size_t ObjStack::calc_size() +{ + size_t size = 0; + for (Node * p = first; p; p = p->next) + size += chunk_size; + return size; +} + +void ObjStack::new_chunk() +{ + if (reserve) { + first_free->next = reserve; + reserve = reserve->next; + first_free = first_free->next; + first_free->next = 0; + } else { + first_free->next = (Node *)malloc(chunk_size); + first_free = first_free->next; + } + first_free->next = 0; + setup_chunk(); +} + +void ObjStack::reset() +{ + assert(first_free->next == 0); + if (first->next) { + first_free->next = reserve; + reserve = first->next; + first->next = 0; + } + first_free = first; + setup_chunk(); +} + +void ObjStack::trim() +{ + while (reserve) { + Node * tmp = reserve->next; + free(reserve); + reserve = tmp; + } +} + +} diff --git a/jni/common/objstack.hpp b/jni/common/objstack.hpp new file mode 100644 index 0000000..d98ff61 --- /dev/null +++ b/jni/common/objstack.hpp @@ -0,0 +1,171 @@ + +#ifndef ACOMMON_OBJSTACK__HPP +#define ACOMMON_OBJSTACK__HPP + +#include "parm_string.hpp" +#include <stdlib.h> +#include <assert.h> + +namespace acommon { + +class ObjStack +{ + typedef unsigned char byte; + struct Node + { + Node * next; + byte data[1]; // hack for data[] + }; + size_t chunk_size; + size_t min_align; + Node * first; + Node * first_free; + Node * reserve; + byte * top; + byte * bottom; + byte * temp_end; + void setup_chunk(); + void new_chunk(); + + ObjStack(const ObjStack &); + void operator=(const ObjStack &); + + void align_bottom(size_t align) { + size_t a = (size_t)bottom % align; + if (a != 0) bottom += align - a; + } + void align_top(size_t align) { + top -= (size_t)top % align; + } +public: + // The alignment here is the guaranteed alignment that memory in + // new chunks will be aligned to. It does NOT guarantee that + // every object is aligned as such unless all objects inserted + // are a multiple of align. + ObjStack(size_t chunk_s = 1024, size_t align = sizeof(void *)); + ~ObjStack(); + + size_t calc_size(); + + void reset(); + void trim(); + + // This alloc_bottom does NOT check alignment. However, if you always + // insert objects with a multiple of min_align than it will always + // me aligned as such. + void * alloc_bottom(size_t size) { + byte * tmp = bottom; + bottom += size; + if (bottom > top) {new_chunk(); tmp = bottom; bottom += size;} + return tmp; + } + // This alloc_bottom will insure that the object is aligned based on the + // alignment given. + void * alloc_bottom(size_t size, size_t align) + {loop: + align_bottom(align); + byte * tmp = bottom; + bottom += size; + if (bottom > top) {new_chunk(); goto loop;} + return tmp; + } + char * dup_bottom(ParmString str) { + return (char *)memcpy(alloc_bottom(str.size() + 1), + str.str(), str.size() + 1); + } + + // This alloc_bottom does NOT check alignment. However, if you + // always insert objects with a multiple of min_align than it will + // always be aligned as such. + void * alloc_top(size_t size) { + top -= size; + if (top < bottom) {new_chunk(); top -= size;} + return top; + } + // This alloc_top will insure that the object is aligned based on + // the alignment given. + void * alloc_top(size_t size, size_t align) + {loop: + top -= size; + align_top(align); + if (top < bottom) {new_chunk(); goto loop;} + return top; + } + char * dup_top(ParmString str) { + return (char *)memcpy(alloc_top(str.size() + 1), + str.str(), str.size() + 1); + } + + // By default objects are allocated from the top since that is sligtly + // more efficient + void * alloc(size_t size) {return alloc_top(size);} + void * alloc(size_t size, size_t align) {return alloc_top(size,align);} + char * dup(ParmString str) {return dup_top(str);} + + // alloc_temp allocates an object from the bottom which can be + // resized untill it is commited. If the resizing will involve + // moving the object than the data will be copied in the same way + // realloc does. Any previously allocated objects are aborted when + // alloc_temp is called. + void * temp_ptr() { + if (temp_end) return bottom; + else return 0; + } + unsigned temp_size() { + return temp_end - bottom; + } + void * alloc_temp(size_t size) { + temp_end = bottom + size; + if (temp_end > top) { + new_chunk(); + temp_end = bottom + size; + } + return bottom; + } + // returns a pointer the the new beginning of the temp memory + void * resize_temp(size_t size) { + if (temp_end == 0) + return alloc_temp(size); + if (bottom + size <= top) { + temp_end = bottom + size; + } else { + size_t s = temp_end - bottom; + byte * p = bottom; + new_chunk(); + memcpy(bottom, p, s); + temp_end = bottom + size; + } + return bottom; + } + // returns a pointer to the beginning of the new memory (in + // otherwords the END of the temp memory BEFORE the call to grow + // temp) NOT the beginning if the temp memory + void * grow_temp(size_t s) { + if (temp_end == 0) + return alloc_temp(s); + unsigned old_size = temp_end - bottom; + unsigned size = old_size + s; + if (bottom + size <= top) { + temp_end = bottom + size; + } else { + size_t s = temp_end - bottom; + byte * p = bottom; + new_chunk(); + memcpy(bottom, p, s); + temp_end = bottom + size; + } + return bottom + old_size; + } + void abort_temp() { + temp_end = 0;} + void commit_temp() { + bottom = temp_end; + temp_end = 0;} + +}; + +typedef ObjStack StringBuffer; + +} + +#endif diff --git a/jni/common/objstack.lo b/jni/common/objstack.lo new file mode 100644 index 0000000..be8f477 --- /dev/null +++ b/jni/common/objstack.lo @@ -0,0 +1,12 @@ +# common/objstack.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/objstack.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/ostream.hpp b/jni/common/ostream.hpp new file mode 100644 index 0000000..66becd4 --- /dev/null +++ b/jni/common/ostream.hpp @@ -0,0 +1,67 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_OSTREAM__HPP +#define ASPELL_OSTREAM__HPP + +#include <stdarg.h> + +#include "parm_string.hpp" + +namespace acommon { + + // FIXME: Add Print Method compatible with printf and friends. + // Than avoid code bloat by using it in many places instead of + // out << "Bla " << something << " djdkdk " << something else << "\n" + + class OStream { + public: + virtual void write (char c) = 0; + virtual void write (ParmStr) = 0; + virtual void write (const void *, unsigned int) = 0; + + virtual int vprintf(const char *format, va_list ap) = 0; + +#ifdef __GNUC__ + __attribute__ ((format (printf,2,3))) +#endif + int printf(const char * format, ...) + { + va_list ap; + va_start(ap, format); + int res = vprintf(format, ap); + va_end(ap); + return res; + } + + void put (char c) {write(c);} + void put (ParmStr str) {write(str);} + + virtual void printl(ParmStr l) + { + write(l); + write('\n'); + } + + void write16(unsigned short v) {write(&v, 2);} + void write32(unsigned int v) {write(&v, 4);} + + OStream & operator << (char c) { + write(c); + return *this; + } + + OStream & operator << (ParmStr in) { + write(in); + return *this; + } + + virtual ~OStream() {} + }; + +} + +#endif diff --git a/jni/common/parm_string.hpp b/jni/common/parm_string.hpp new file mode 100644 index 0000000..129c91e --- /dev/null +++ b/jni/common/parm_string.hpp @@ -0,0 +1,116 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_PARM_STRING__HPP +#define ASPELL_PARM_STRING__HPP + +#include <string.h> +#include <limits.h> + +// +// ParmString is a special string class that is designed to be used as +// a parameter for a function that is expecting a string It will allow +// either a "const char *" or "String" class to be passed in. It will +// automatically convert to a "const char *". The string can also be +// accesses via the "str" method. Usage example: +// +// void foo(ParmString s1, s2) { +// const char * str0 = s1; +// unsigned int size0 = s2.size() +// if (s1 == s2 || s2 == "bar") { +// ... +// } +// } +// ... +// String s1 = "..."; +// foo(s1); +// const char * s2 = "..."; +// foo(s2); +// +// The string is expected to be null terminated, even if size is give +// during construction. +// + +namespace acommon { + + template<typename Ret> class PosibErr; + + class String; + + class ParmString { + public: + ParmString() : str_(0) {} + ParmString(const char * str, unsigned int sz = UINT_MAX) + : str_(str), size_(sz) {} + inline ParmString(const String &); + inline ParmString(const PosibErr<const char *> &); + inline ParmString(const PosibErr<String> &); + + void set(const char * str, unsigned int sz = UINT_MAX) { + str_ = str, size_ = sz; + } + + bool empty() const { + return str_ == 0 || str_[0] == '\0'; + } + unsigned int size() const { + if (size_ != UINT_MAX) return size_; + else return size_ = strlen(str_); + } + bool have_size() const {return size_ != UINT_MAX;} + operator const char * () const { + return str_; + } + const char * str () const { + return str_; + } + public: // but don't use unless you have to + const char * str_; + mutable unsigned int size_; + }; + + typedef const ParmString & ParmStr; + + static inline bool operator== (ParmStr s1, ParmStr s2) + { + if (s1.str() == 0 || s2.str() == 0) + return s1.str() == s2.str(); + return strcmp(s1,s2) == 0; + } + static inline bool operator== (const char * s1, ParmStr s2) + { + if (s1 == 0 || s2.str() == 0) + return s1 == s2.str(); + return strcmp(s1,s2) == 0; + } + static inline bool operator== (ParmStr s1, const char * s2) + { + if (s1.str() == 0 || s2 == 0) + return s1.str() == s2; + return strcmp(s1,s2) == 0; + } + static inline bool operator!= (ParmStr s1, ParmStr s2) + { + if (s1.str() == 0 || s2.str() == 0) + return s1.str() != s2.str(); + return strcmp(s1,s2) != 0; + } + static inline bool operator!= (const char * s1, ParmStr s2) + { + if (s1 == 0 || s2.str() == 0) + return s1 != s2.str(); + return strcmp(s1,s2) != 0; + } + static inline bool operator!= (ParmStr s1, const char * s2) + { + if (s1.str() == 0 || s2 == 0) + return s1.str() != s2; + return strcmp(s1,s2) != 0; + } + +} + +#endif diff --git a/jni/common/posib_err.cpp b/jni/common/posib_err.cpp new file mode 100644 index 0000000..2d33d5a --- /dev/null +++ b/jni/common/posib_err.cpp @@ -0,0 +1,128 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include <stdlib.h> +#include <stdio.h> +#include <assert.h> + +//#include "iostream.hpp" + +#include "posib_err.hpp" + +#include "gettext.h" + + +namespace acommon { + + String & String::operator= (const PosibErr<String> & s) + { + operator=(s.data); + return *this; + } + + struct StrSize { + const char * str; + unsigned int size; + StrSize() : str(0), size(0) {} + void operator= (ParmString s) {str = s; size = s.size();} + }; + + PosibErrBase & PosibErrBase::set(const ErrorInfo * inf, + ParmString p1, ParmString p2, + ParmString p3, ParmString p4) + { + const char * s0 = inf->mesg ? _(inf->mesg) : ""; + const char * s; + ParmString p[4] = {p1,p2,p3,p4}; + StrSize m[10]; + unsigned int i = 0; + while (i != 4 && p[i] != 0) + ++i; + assert(i == inf->num_parms || i == inf->num_parms + 1); + i = 0; + while (true) { + s = s0 + strcspn(s0, "%"); + m[i].str = s0; + m[i].size = s - s0; + if (*s == '\0') break; + ++i; + s = strchr(s, ':') + 1; + unsigned int ip = *s - '0' - 1; + assert(0 <= ip && ip < inf->num_parms); + m[i] = p[ip]; + ++i; + s0 = s+1; + } + if (!p[inf->num_parms].empty()) { + m[++i] = " "; + m[++i] = p[inf->num_parms]; + } + unsigned int size = 0; + for (i = 0; m[i].str != 0; ++i) + size += m[i].size; + char * str = (char *)malloc(size + 1); + s0 = str; + for (i = 0; m[i].str != 0; str+=m[i].size, ++i) + strncpy(str, m[i].str, m[i].size); + *str = '\0'; + Error * e = new Error; + e->err = inf; + e->mesg = s0; + err_ = new ErrPtr(e); + + return *this; + } + + PosibErrBase & PosibErrBase::with_file(ParmString fn, int line_num) + { + assert(err_ != 0); + assert(err_->refcount == 1); + char * m = const_cast<char *>(err_->err->mesg); + unsigned int orig_len = strlen(m); + unsigned int new_len = fn.size() + (line_num ? 10 : 0) + 2 + orig_len + 1; + char * s = (char *)malloc(new_len); + if (line_num) + snprintf(s, new_len, "%s:%d: %s", fn.str(), line_num, m); + else + snprintf(s, new_len, "%s: %s", fn.str(), m); + free(m); + const_cast<Error *>(err_->err)->mesg = s; + return *this; + } + +#ifndef NDEBUG + void PosibErrBase::handle_err() const { + assert (err_); + assert (!err_->handled); + fputs(_("Unhandled Error: "), stderr); + fputs(err_->err->mesg, stderr); + fputs("\n", stderr); + abort(); + } +#endif + + Error * PosibErrBase::release() { + assert (err_); + assert (err_->refcount <= 1); + --err_->refcount; + Error * tmp; + if (err_->refcount == 0) { + tmp = const_cast<Error *>(err_->err); + delete err_; + } else { + tmp = new Error(*err_->err); + } + err_ = 0; + return tmp; + } + + void PosibErrBase::del() { + if (!err_) return; + delete const_cast<Error *>(err_->err); + delete err_; + } + +} diff --git a/jni/common/posib_err.hpp b/jni/common/posib_err.hpp new file mode 100644 index 0000000..6634624 --- /dev/null +++ b/jni/common/posib_err.hpp @@ -0,0 +1,249 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef PCOMMON_POSIB_ERR__HPP +#define PCOMMON_POSIB_ERR__HPP + +#include "string.hpp" +#include "error.hpp" + +#include "errors.hpp" + +#include "ndebug.hpp" + +namespace acommon { + + // PosibErr<type> is a special Error handling device that will make + // sure that an error is properly handled. It is expected to be + // used as the return type of the function It will automatically + // convert to the "normal" return type however if the normal + // returned type is accessed and there is an "unhandled" error + // condition it will abort It will also abort if the object is + // destroyed with an "unhandled" error condition. This includes + // ignoring the return type of a function returning an error + // condition. An error condition is handled by simply checking for + // the presence of an error, calling ignore, or taking ownership of + // the error. + + enum WhichErr { PrimErr, SecErr }; + + extern "C" const ErrorInfo * const perror_bad_file_format; + + template <typename Ret> class PosibErr; + + class PosibErrBase { + private: + struct ErrPtr { + const Error * err; +#ifndef NDEBUG + bool handled; +#endif + int refcount; + ErrPtr(const Error * e) : err(e), +#ifndef NDEBUG + handled(false), +#endif + refcount(1) {} + }; + ErrPtr * err_; + + protected: + + void posib_handle_err() const { +#ifndef NDEBUG + if (err_ && !err_->handled) + handle_err(); +#endif + } + + void copy(const PosibErrBase & other) { + err_ = other.err_; + if (err_) { + ++ err_->refcount; + } + } + void destroy() { + if (err_ == 0) return; + -- err_->refcount; + if (err_->refcount == 0) { +#ifndef NDEBUG + if (!err_->handled) + handle_err(); +#endif + del(); + } + } + + public: + PosibErrBase() + : err_(0) {} + PosibErrBase(const PosibErrBase & other) + { + copy(other); + } + PosibErrBase& operator= (const PosibErrBase & other) { + destroy(); + copy(other); + return *this; + } + ~PosibErrBase() { + destroy(); + } + + Error * release_err() { + if (err_ == 0) + return 0; + else + return release(); + } + void ignore_err() { +#ifndef NDEBUG + if (err_ != 0) + err_->handled = true; +#endif + } + const Error * get_err() const { + if (err_ == 0) { + return 0; + } else { +#ifndef NDEBUG + err_->handled = true; +#endif + return err_->err; + } + } + const Error * prvw_err() const { + if (err_ == 0) + return 0; + else + return err_->err; + } + bool has_err() const { + return err_ != 0; + } + bool has_err(const ErrorInfo * e) const { + if (err_ == 0) { + return false; + } else { + if (err_->err->is_a(e)) { +#ifndef NDEBUG + err_->handled = true; +#endif + return true; + } else { + return false; + } + } + } + PosibErrBase & prim_err(const ErrorInfo * inf, ParmString p1 = 0, + ParmString p2 = 0, ParmString p3 = 0, + ParmString p4 = 0) + { + return set(inf, p1, p2, p3, p4); + } + + // This should only be called _after_ set is called + PosibErrBase & with_file(ParmString fn, int lineno = 0); + + PosibErrBase & set(const ErrorInfo *, + ParmString, ParmString, ParmString, ParmString); + + private: + +#ifndef NDEBUG + void handle_err() const; +#endif + Error * release(); + void del(); + }; + + template <> + class PosibErr<void> : public PosibErrBase + { + public: + PosibErr(const PosibErrBase & other) + : PosibErrBase(other) {} + + PosibErr() {} + }; + + template <typename Ret> + class PosibErr : public PosibErrBase + { + public: + PosibErr() {} + + PosibErr(const PosibErrBase & other) + : PosibErrBase(other) {} + + template <typename T> + PosibErr(const PosibErr<T> & other) + : PosibErrBase(other), data(other.data) {} + + PosibErr(const PosibErr<void> & other) + : PosibErrBase(other) {} + + PosibErr& operator= (const PosibErr & other) { + data = other.data; + PosibErrBase::destroy(); + PosibErrBase::copy(other); + return *this; + } + PosibErr(const Ret & d) : data(d) {} + operator const Ret & () const {posib_handle_err(); return data;} + + Ret data; + }; + +// +// +// +#define RET_ON_ERR_SET(command, type, var) \ + type var;do{PosibErr< type > pe(command);if(pe.has_err())return PosibErrBase(pe);var=pe.data;} while(false) +#define RET_ON_ERR(command) \ + do{PosibErrBase pe(command);if(pe.has_err())return PosibErrBase(pe);}while(false) + + + // + // + // + + static inline PosibErrBase make_err(const ErrorInfo * inf, + ParmString p1 = 0, ParmString p2 = 0, + ParmString p3 = 0, ParmString p4 = 0) + { + return PosibErrBase().prim_err(inf, p1, p2, p3, p4); + } + + static const PosibErr<void> no_err; + + // + // + // + inline String & String::operator= (const PosibErr<const char *> & s) + { + *this = s.data; + return *this; + } + + inline bool operator== (const PosibErr<String> & x, const char * y) + { + return x.data == y; + } + inline bool operator!= (const PosibErr<String> & x, const char * y) + { + return x.data != y; + } + + inline ParmString::ParmString(const PosibErr<const char *> & s) + : str_(s.data), size_(UINT_MAX) {} + + inline ParmString::ParmString(const PosibErr<String> & s) + : str_(s.data.c_str()), size_(s.data.size()) {} + +} + +#endif diff --git a/jni/common/posib_err.lo b/jni/common/posib_err.lo new file mode 100644 index 0000000..a974e98 --- /dev/null +++ b/jni/common/posib_err.lo @@ -0,0 +1,12 @@ +# common/posib_err.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/posib_err.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/simple_string.hpp b/jni/common/simple_string.hpp new file mode 100644 index 0000000..697289b --- /dev/null +++ b/jni/common/simple_string.hpp @@ -0,0 +1,65 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_SIMPLE_STRING__HPP +#define ASPELL_SIMPLE_STRING__HPP + +#include <string.h> + +#include "parm_string.hpp" + +namespace acommon { + + struct SimpleString { + const char * str; + unsigned int size; + + SimpleString() : str(0), size(0) {} + SimpleString(const char * str0) : str(str0), size(strlen(str)) {} + SimpleString(const char * str0, unsigned int sz) : str(str0), size(sz) {} + SimpleString(ParmString str0) : str(str0), size(str0.size()) {} + + bool empty() const {return size == 0;} + operator const char * () const {return str;} + operator ParmString () const {return ParmString(str, size);} + const char * begin() const {return str;} + const char * end() const {return str + size;} + }; + + static inline bool operator==(SimpleString s1, SimpleString s2) + { + if (s1.size != s2.size) + return false; + else + return memcmp(s1,s2,s1.size) == 0; + } + static inline bool operator==(const char * s1, SimpleString s2) + { + return strcmp(s1,s2) == 0; + } + static inline bool operator==(SimpleString s1, const char * s2) + { + return strcmp(s1,s2) == 0; + } + + static inline bool operator!=(SimpleString s1, SimpleString s2) + { + if (s1.size != s2.size) + return true; + else + return memcmp(s1,s2,s1.size) != 0; + } + static inline bool operator!=(const char * s1, SimpleString s2) + { + return strcmp(s1,s2) != 0; + } + static inline bool operator!=(SimpleString s1, const char * s2) + { + return strcmp(s1,s2) != 0; + } +} + +#endif diff --git a/jni/common/speller.cpp b/jni/common/speller.cpp new file mode 100644 index 0000000..e0a9fc8 --- /dev/null +++ b/jni/common/speller.cpp @@ -0,0 +1,18 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "speller.hpp" +#include "convert.hpp" +#include "clone_ptr-t.hpp" +#include "config.hpp" + +namespace acommon { + + Speller::Speller(SpellerLtHandle h) : lt_handle_(h) {} + + Speller::~Speller() {} +} + diff --git a/jni/common/speller.hpp b/jni/common/speller.hpp new file mode 100644 index 0000000..031299c --- /dev/null +++ b/jni/common/speller.hpp @@ -0,0 +1,131 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +// Aspell implementation header file. +// Applications that just use the Aspell library should not include +// these files as they are subject to change. +// Aspell Modules MUST include some of the implementation files and +// spell checkers MAY include some of these files. +// If ANY of the implementation files are included you also link with +// libaspell-impl to protect you from changes in these files. + +#ifndef ASPELL_SPELLER__HPP +#define ASPELL_SPELLER__HPP + +#include "can_have_error.hpp" +#include "copy_ptr.hpp" +#include "clone_ptr.hpp" +#include "mutable_string.hpp" +#include "posib_err.hpp" +#include "parm_string.hpp" +#include "char_vector.hpp" + +namespace acommon { + + typedef void * SpellerLtHandle; + + class Config; + class WordList; + class Convert; + class Tokenizer; + class Filter; + class DocumentChecker; + + struct CheckInfo { + const CheckInfo * next; + ParmString word; // generally the root + short pre_strip_len; + short pre_add_len; + const char * pre_add; + short suf_strip_len; + short suf_add_len; + const char * suf_add; + short pre_flag; + short suf_flag; + short guess; + short compound; + }; + + class Speller : public CanHaveError + { + private: + SpellerLtHandle lt_handle_; + Speller(const Speller &); + Speller & operator= (const Speller &); + public: + String temp_str_0; + String temp_str_1; + ClonePtr<Convert> to_internal_; + ClonePtr<Convert> from_internal_; + protected: + CopyPtr<Config> config_; + Speller(SpellerLtHandle h); + public: + SpellerLtHandle lt_handle() const {return lt_handle_;} + + Config * config() {return config_;} + const Config * config() const {return config_;} + + // utility functions + + virtual char * to_lower(char *) = 0; + + // the setup class will take over for config + virtual PosibErr<void> setup(Config *) = 0; + + // sets up the tokenizer class + // should be called only after this class is setup + virtual void setup_tokenizer(Tokenizer *) = 0; + + //////////////////////////////////////////////////////////////// + // + // Strings from this point on are expected to be in the + // encoding specified by encoding() + // + + virtual PosibErr<bool> check(MutableString) = 0; + + // these functions return information about the last word checked + virtual const CheckInfo * check_info() = 0; + + virtual PosibErr<void> add_to_personal(MutableString) = 0; + virtual PosibErr<void> add_to_session (MutableString) = 0; + + // because the word lists may potently have to convert from one + // encoding to another the pointer returned by the enumeration is only + // valid to the next call. + + virtual PosibErr<const WordList *> personal_word_list() const = 0; + virtual PosibErr<const WordList *> session_word_list () const = 0; + virtual PosibErr<const WordList *> main_word_list () const = 0; + + virtual PosibErr<void> save_all_word_lists() = 0; + + virtual PosibErr<void> clear_session() = 0; + + virtual PosibErr<const WordList *> suggest(MutableString) = 0; + // return null on error + // the word list returned by suggest is only valid until the next + // call to suggest + + virtual PosibErr<void> store_replacement(MutableString, + MutableString) = 0; + + virtual ~Speller(); + + }; + + + // This function is current a hack to reload the filters in the + // speller class. I hope to eventually find a better way. + PosibErr<void> reload_filters(Speller * m); + + + PosibErr<Speller *> new_speller(Config * c); + +} + +#endif diff --git a/jni/common/speller.lo b/jni/common/speller.lo new file mode 100644 index 0000000..b9be664 --- /dev/null +++ b/jni/common/speller.lo @@ -0,0 +1,12 @@ +# common/speller.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/speller.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/stack_ptr.hpp b/jni/common/stack_ptr.hpp new file mode 100644 index 0000000..f7548b9 --- /dev/null +++ b/jni/common/stack_ptr.hpp @@ -0,0 +1,54 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef stack_ptr +#define stack_ptr + +#include <assert.h> + +namespace acommon { + + template <typename T> + class StackPtr { + T * ptr; + + // to avoid operator* being used unexpectedly. for example + // without this the following will compile + // PosibErr<T> fun(); + // PosibErr<StackPtr<T > > pe = fun(); + // and operator* and StackPtr(T *) will be used. The explicit + // doesn't protect us here due to PosibErr + StackPtr(const StackPtr & other); + // becuase I am paranoid + StackPtr & operator=(const StackPtr & other); + + public: + + explicit StackPtr(T * p = 0) : ptr(p) {} + + StackPtr(StackPtr & other) : ptr (other.release()) {} + + ~StackPtr() {del();} + + StackPtr & operator=(StackPtr & other) + {reset(other.release()); return *this;} + + T & operator* () const {return *ptr;} + T * operator-> () const {return ptr;} + T * get() const {return ptr;} + operator T * () const {return ptr;} + + T * release () {T * p = ptr; ptr = 0; return p;} + + void del() {delete ptr; ptr = 0;} + void reset(T * p) {assert(ptr==0); ptr = p;} + StackPtr & operator=(T * p) {reset(p); return *this;} + + }; +} + +#endif + diff --git a/jni/common/string.cpp b/jni/common/string.cpp new file mode 100644 index 0000000..5dffbc8 --- /dev/null +++ b/jni/common/string.cpp @@ -0,0 +1,86 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include <stdarg.h> +#include <stdio.h> + +#ifndef va_copy +# ifdef __va_copy +# define va_copy __va_copy +# else +# define va_copy(dst, src) memcpy(&dst, &src, sizeof(va_list)) +# endif +#endif + +#include "string.hpp" +#include "asc_ctype.hpp" + +namespace acommon { + + // reserve space for at least s+1 characters + void String::reserve_i(size_t s) + { + size_t old_size = end_ - begin_; + size_t new_size = (storage_end_ - begin_) * 3 / 2; + if (new_size < 64) new_size = 64; + if (new_size < s + 1) new_size = s + 1; + if (old_size == 0) { + if (begin_) free(begin_); + begin_ = (char *)malloc(new_size); + } else { + begin_ = (char *)realloc(begin_, new_size); + } + end_ = begin_ + old_size; + storage_end_ = begin_ + new_size; + } + + int String::vprintf(const char * format, va_list ap0) + { + reserve(size() + 64); + int res = 0; + va_list ap; + loop: { + int avail = storage_end_ - end_; + if (res < 0 && avail > 1024*1024) + return -1; // to avoid an infinite loop in case a neg result + // really means an error and not just "not enough + // space" + va_copy(ap,ap0); + res = vsnprintf(end_, avail, format, ap); + va_end(ap); + if (res < 0) { + reserve_i(); goto loop; + } else if (res > avail) { + reserve_i(size() + res); goto loop; + } + } + end_ += res; + return res; + } + + bool StringIStream::append_line(String & str, char d) + { + if (in_str[0] == '\0') return false; + const char * end = in_str; + while (*end != d && *end != '\0') ++end; + str.append(in_str, end - in_str); + in_str = end; + if (*in_str == d) ++in_str; + return true; + } + + bool StringIStream::read(void * data, unsigned int size) + { + char * str = static_cast<char *>(data); + while (*in_str != '\0' && size != 0) { + *str = *in_str; + ++in_str; + ++str; + ++size; + } + return size == 0; + } +} diff --git a/jni/common/string.hpp b/jni/common/string.hpp new file mode 100644 index 0000000..9e7f1d5 --- /dev/null +++ b/jni/common/string.hpp @@ -0,0 +1,498 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_STRING__HPP +#define ASPELL_STRING__HPP + +#include <string.h> +#include <stdlib.h> + +#include <algorithm> + +#include "hash_fun.hpp" +#include "parm_string.hpp" +#include "mutable_string.hpp" +#include "ostream.hpp" +#include "istream.hpp" + +// +// acommon::String is similar to std::string, but without many of the +// extra non-stl like methods. The string is guaranteed to be stored +// in a continues areas of memory but is not guaranteed to be null +// terminated. However, space is always allocated for the null +// characters. Thus, the c_str() method will never invalided any +// exiting pointers. The string is also null terminated when accesed +// via the str() and mstr() methods. In addition the method +// ensure_null_end() will null terminate the string. Once null +// terminated the string will remain as such until the length of the +// string changes. +// + +namespace acommon { + + template <typename Ret> class PosibErr; + + class String : public OStream + { + public: + typedef const char * const_iterator; + typedef char * iterator; + typedef size_t size_type; + + private: + // if begin_ != 0 than storage_end_ - begin_ > 1 + char * begin_; + char * end_; + char * storage_end_; + + void assign_only_nonnull(const char * b, unsigned size) + { + begin_ = (char *)malloc(size + 1); + memmove(begin_, b, size); + end_ = begin_ + size; + storage_end_ = end_ + 1; + } + void zero() + { + begin_ = 0; + end_ = 0; + storage_end_ = 0; + } + void assign_only(const char * b) + { + if (b && *b) assign_only_nonnull(b, strlen(b)); + else zero(); + } + void assign_only(const char * b, unsigned size) + { + if (b && size > 0) assign_only_nonnull(b, size); + else zero(); + } + void reserve_i(size_t s = 0); + public: + void reserve(size_t s) + { + if (storage_end_ - begin_ >= (int)s + 1) return; + reserve_i(s); + } + + char * begin() {return begin_;} + char * end() {return end_;} + + const char * begin() const {return begin_;} + const char * end() const {return end_;} + + char * pbegin() {return begin_;} + char * pend() {return end_;} + + const char * pbegin() const {return begin_;} + const char * pend() const {return end_;} + + size_t size() const {return end_ - begin_;} + bool empty() const {return begin_ == end_;} + size_t max_size() const {return INT_MAX;} + size_t capacity() const {return storage_end_ ? storage_end_ - begin_ - 1 : 0;} + + void ensure_null_end() const { + if (!begin_) const_cast<String *>(this)->reserve_i(); + *end_ = '\0'; + } + + const char * c_str() const { + if (begin_) {ensure_null_end(); return begin_;} + else return ""; + } + const char * str() const {return c_str();} + char * mstr() + { + if (!begin_) reserve_i(); + ensure_null_end(); + return begin_; + } + + char * data() {return begin_;} + const char * data() const {return begin_;} + + char * data(int pos) {return begin_ + pos;} + char * data_end() {return end_;} + + template <typename U> + U * datap() { + return reinterpret_cast<U * >(begin_); + } + template <typename U> + U * datap(int pos) { + return reinterpret_cast<U * >(begin_ + pos); + } + + char & operator[] (size_t pos) {return begin_[pos];} + char operator[] (size_t pos) const {return begin_[pos];} + + char & back() {return end_[-1];} + char back() const {return end_[-1];} + + void clear() {end_ = begin_;} + + // + // constructors + // + + String() : begin_(0), end_(0), storage_end_(0) {} + String(const char * s) {assign_only(s);} + String(const char * s, unsigned size) {assign_only(s, size);} + String(ParmStr s) {assign_only(s, s.size());} + String(MutableString s) {assign_only(s.str, s.size);} + String(const String & other) {assign_only(other.begin_, other.end_-other.begin_);} + + // + // assign + // + + void assign(const char * b, size_t size) + { + clear(); + if (size != 0) { + reserve(size); + memmove(begin_, b, size); + end_ = begin_ + size; + } + } + void assign(const char * b) + { + if (b) assign(b, strlen(b)); + } + String & operator= (const char * s) { + assign(s); + return *this; + } + inline String & operator= (const PosibErr<const char *> & s); + String & operator= (ParmStr s) { + assign(s, s.size()); + return *this; + } + String & operator= (MutableString s) { + assign(s.str, s.size); + return *this; + } + String & operator= (const String & s) { + assign(s.begin_, s.end_ - s.begin_); + return *this; + } + /*inline*/ String & operator= (const PosibErr<String> & s); + + // + // append + // + + String & append(const void * str, unsigned int sz) + { + reserve(size() + sz); + if (sz > 0) memcpy(end_, str, sz); + end_ += sz; + return *this; + } + String & append(const void * d, const void * e) + { + append(d, (const char *)e - (const char *)d); + return *this; + } + String & append(String & str, unsigned int sz) + { + append(str.begin_, sz); + return *this; + } + String & append(const char * str) + { + if (!end_) reserve_i(); + for (; *str && end_ != storage_end_ - 1; ++str, ++end_) + *end_ = *str; + if (end_ == storage_end_ - 1) append(str, strlen(str)); + return *this; + } + String & append(char c) + { + reserve(size() + 1); + *end_ = c; + ++end_; + return *this; + } + + String & operator+= (const char * s) { + append(s); + return *this; + } + String & operator+= (char c) { + append(c); + return *this; + } + String & operator+= (ParmStr s) { + if (s.have_size()) + append(s, s.size()); + else + append(s); + return *this; + } + String & operator+= (MutableString s) { + append(s.str, s.size); + return *this; + } + String & operator+= (const String & s) { + append(s.begin_, s.end_ - s.begin_); + return *this; + } + + // + // + // + + ~String() {if (begin_) free(begin_);} + + void swap(String & other) { + std::swap(begin_, other.begin_); + std::swap(end_, other.end_); + std::swap(storage_end_, other.storage_end_); + } + + // + // + // + + int vprintf(const char * format, va_list ap); + + // + // + // + + void push_back(char c) {append(c);} + + void pop_back(size_t p = 1) {end_ -= p;} + + char * insert(size_t p, char c) + { + reserve(size() + 1); + char * pos = begin_ + p; + size_t to_move = end_ - pos; + if (to_move) memmove(pos + 1, pos, to_move); + *pos = c; + ++end_; + return pos; + } + char * insert(char * pos, char c) + { + return insert(pos - begin_, c); + } + void insert(size_t p, const char * str, size_t sz) + { + reserve(size() + sz); + char * pos = begin_ + p; + size_t to_move = end_ - pos; + if (to_move) memmove(pos + sz, pos, to_move); + memcpy(pos, str, sz); + end_ += sz; + } + void insert(char * pos, const char * f, const char * l) + { + insert(pos - begin_, f, l - f); + } + + char * erase(char * pos) + { + size_t to_move = end_ - pos - 1; + if (to_move) memmove(pos, pos + 1, to_move); + --end_; + return pos; + } + char * erase(char * f, char * l) + { + if (l >= end_) { + end_ = f < end_ ? f : end_; + } else { + size_t sz = l - f; + memmove(f, f + sz, end_ - l); + end_ -= sz; + } + return f; + } + void erase(size_t pos, size_t s) + { + erase(begin_ + pos, begin_ + pos + s); + } + + //FIXME: Make this more efficent by rewriting the implemenation + // to work with raw memory rather than using vector<char> + template <typename Itr> + void replace(iterator start, iterator stop, Itr rstart, Itr rstop) + { + iterator i = erase(start,stop); + insert(i, rstart, rstop); + } + + void replace(size_t pos, size_t n, const char * with, size_t s) + { + replace(begin_ + pos, begin_ + pos + n, with, with + s); + } + void resize(size_t n) + { + reserve(n); + end_ = begin_ + n; + } + void resize(size_t n, char c) + { + size_t old_size = size(); + reserve(n); + end_ = begin_ + n; + int diff = n - old_size; + if (diff > 0) memset(begin_ + old_size, c, diff); + } + int alloc(int s) { + int pos = size(); + resize(pos + s); + return pos; + } + + bool prefix(ParmStr str, size_t offset = 0) const + { + if (str.size() > size() - offset) return false; + return memcmp(begin_ + offset, str.str(), str.size()) == 0; + }; + bool suffix(ParmStr str) const + { + if (str.size() > size()) return false; + return memcmp(end_ - str.size(), str.str(), str.size()) == 0; + } + + // FIXME: Eventually remove + static const size_t npos = INT_MAX; + size_t find(char c, size_t pos = 0) const { + char * res = (char *)memchr(begin_ + pos, c, size() - pos); + if (res == 0) return npos; + else return res - begin_; + } + size_t rfind(char c) const { + for (int i = size() - 1; i >= 0; --i) { + if (begin_[i] == c) return i; + } + return npos; + } + String substr(size_t pos = 0, size_t n = npos) const + { + if (n == npos) + return String(begin_ + pos, size() - pos); + else + return String(begin_ + pos, n); + } + // END FIXME + + unsigned short & at16(unsigned int pos) + {return reinterpret_cast<unsigned short &>(operator[](pos));} + unsigned int & at32(unsigned int pos) + {return reinterpret_cast<unsigned int &>(operator[](pos));} + + void write (char c) {append(c);} + void write (ParmStr str) {operator+=(str);} + void write (const void * str, unsigned int sz) {append(str,sz);} + + + String & operator << (ParmStr str) { + append(str); + return *this; + } + + String & operator << (char c) { + append(c); + return *this; + } + }; + + inline String operator+ (ParmStr lhs, ParmStr rhs) + { + String tmp; + tmp.reserve(lhs.size() + rhs.size()); + tmp += lhs; + tmp += rhs; + return tmp; + } + + inline bool operator== (const String & x, const String & y) + { + if (x.size() != y.size()) return false; + if (x.size() == 0) return true; + return memcmp(x.data(), y.data(), x.size()) == 0; + } + inline bool operator== (const String & x, const char * y) + { + return strcmp(x.c_str(), y) == 0; + } + inline bool operator== (const char * x, const String & y) + { + return strcmp(x, y.c_str()) == 0; + } + inline bool operator== (const String & x, ParmStr y) + { + if (y == 0) return x.size() == 0; + return strcmp(x.c_str(), y) == 0; + } + inline bool operator== (ParmStr x, const String & y) + { + if (x == 0) return y.size() == 0; + return strcmp(x, y.c_str()) == 0; + } + + inline bool operator!= (const String & x, const String & y) + { + return !(x == y); + } + inline bool operator!= (const String & x, const char * y) + { + return strcmp(x.c_str(), y) != 0; + } + inline bool operator!= (const char * x, const String & y) + { + return strcmp(x, y.c_str()) != 0; + } + inline bool operator!= (const String & x, ParmStr y) + { + return !(x == y); + } + inline bool operator!= (ParmStr x, const String & y) + { + return !(x == y); + } + + inline ParmString::ParmString(const String & s) : str_(s.c_str()), size_(s.size()) {} + + class StringIStream : public IStream { + const char * in_str; + char delem; + public: + StringIStream(ParmStr s, char d = ';') + : IStream(d), in_str(s) {} + bool append_line(String & str, char c); + bool read(void * data, unsigned int size); + }; + + template <> struct hash<String> : public HashString<String> {}; + + inline bool IStream::getline(String & str, char c) + { + str.clear(); + return append_line(str,c); + } + + inline bool IStream::getline(String & str) + { + str.clear(); + return append_line(str,delem); + } + +} + +namespace std +{ + template<> inline void swap(acommon::String & x, acommon::String & y) {return x.swap(y);} +} + +#endif diff --git a/jni/common/string.lo b/jni/common/string.lo new file mode 100644 index 0000000..2162c8e --- /dev/null +++ b/jni/common/string.lo @@ -0,0 +1,12 @@ +# common/string.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/string.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/string_enumeration.hpp b/jni/common/string_enumeration.hpp new file mode 100644 index 0000000..409086d --- /dev/null +++ b/jni/common/string_enumeration.hpp @@ -0,0 +1,39 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_STRING_ENUMERATION__HPP +#define ASPELL_STRING_ENUMERATION__HPP + +#include "parm_string.hpp" +#include "type_id.hpp" +#include "char_vector.hpp" + +namespace acommon { + + class StringEnumeration; + class Convert; + + class StringEnumeration { + public: + typedef const char * Value; + virtual bool at_end() const = 0; + virtual const char * next() = 0; + int ref_count_; + TypeId type_id_; + unsigned int type_id() { return type_id_.num; } + int copyable_; + int copyable() { return copyable_; } + virtual StringEnumeration * clone() const = 0; + virtual void assign(const StringEnumeration * other) = 0; + CharVector temp_str; + Convert * from_internal_; + StringEnumeration() : ref_count_(0), copyable_(2), from_internal_(0) {} + virtual ~StringEnumeration() {} + }; + +} + +#endif /* ASPELL_STRING_ENUMERATION__HPP */ diff --git a/jni/common/string_list.cpp b/jni/common/string_list.cpp new file mode 100644 index 0000000..6a2bd9f --- /dev/null +++ b/jni/common/string_list.cpp @@ -0,0 +1,120 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "string_list.hpp" +//#include "iostream.hpp" + +namespace acommon { + + void StringList::copy(const StringList & other) + { + StringListNode * * cur = &first; + StringListNode * other_cur = other.first; + while (other_cur != 0) { + *cur = new StringListNode(other_cur->data.c_str()); + cur = &(*cur)->next; + other_cur = other_cur->next; + } + *cur = 0; + } + + void StringList::destroy() + { + while (first != 0) { + StringListNode * next = first->next; + delete first; + first = next; + } + } + + bool operator==(const StringList & rhs, + const StringList & lhs) + { + StringListNode * rhs_cur = rhs.first; + StringListNode * lhs_cur = lhs.first; + while (rhs_cur != 0 && lhs_cur != 0 && rhs_cur->data == lhs_cur->data) { + rhs_cur = rhs_cur->next; + lhs_cur = lhs_cur->next; + } + return rhs_cur == 0 && lhs_cur == 0; + } + + StringEnumeration * StringListEnumeration::clone() const + { + return new StringListEnumeration(*this); + } + + void StringListEnumeration::assign(const StringEnumeration * other) + { + *this = *(const StringListEnumeration *)other; + } + + + StringList * StringList::clone() const + { + return new StringList(*this); + } + + void StringList::assign(const StringList * other) + { + *this = *(const StringList *)other; + } + + PosibErr<bool> StringList::add(ParmStr str) + { + //CERR.printf("ADD %s\n", str.str()); + StringListNode * * cur = &first; + while (*cur != 0 && strcmp((*cur)->data.c_str(), str) != 0) { + cur = &(*cur)->next; + } + if (*cur == 0) { + *cur = new StringListNode(str); + return true; + } else { + return false; + } + } + + PosibErr<bool> StringList::remove(ParmStr str) + { + //CERR.printf("REM %s\n", str.str()); + StringListNode * * cur = &first; + while (*cur != 0 && strcmp((*cur)->data.c_str(), str)!=0 ) { + cur = &(*cur)->next; + } + if (*cur == 0) { + return false; + } else { + StringListNode * tmp = *cur; + *cur = (*cur)->next; + delete tmp; + return true; + } + } + + PosibErr<void> StringList::clear() + { + //CERR.printf("CLEAR\n"); + StringListNode * temp; + while (first != 0) { + temp = first; + first = temp->next; + delete temp; + } + first = 0; + return no_err; + } + + StringEnumeration * StringList::elements() const + { + return new StringListEnumeration(first); + } + + StringList * new_string_list() { + return new StringList; + } + +} diff --git a/jni/common/string_list.hpp b/jni/common/string_list.hpp new file mode 100644 index 0000000..c4d60bc --- /dev/null +++ b/jni/common/string_list.hpp @@ -0,0 +1,100 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. +#ifndef STRING_LIST_HP_HEADER +#define STRING_LIST_HP_HEADER + +#include "string.hpp" +#include "string_enumeration.hpp" +#include "mutable_container.hpp" +#include "posib_err.hpp" +#include <stdio.h> +#include <cstdio> + +namespace acommon { + + struct StringListNode { + // private data structure + // default copy & destructor unsafe + String data; + StringListNode * next; + StringListNode(ParmStr str, StringListNode * n = 0) + : data(str), next(n) { + } + }; + + class StringListEnumeration : public StringEnumeration { + // default copy and destructor safe + private: + StringListNode * n_; + public: + StringEnumeration * clone() const; + void assign(const StringEnumeration *); + + StringListEnumeration(StringListNode * n) : n_(n) {} + const char * next() { + const char * temp; + if (n_ == 0) { + temp = 0; + } else { + temp = n_->data.c_str(); + n_ = n_->next; + } + return temp; + } + bool at_end() const { + return n_ == 0; + } + }; + + + class StringList : public MutableContainer { + // copy and destructor provided + private: + StringListNode * first; + + StringListNode * * find (ParmStr str); + void copy(const StringList &); + void destroy(); + public: + friend bool operator==(const StringList &, const StringList &); + StringList() : first(0) {} + StringList(const StringList & other) + { + copy(other); + } + StringList & operator= (const StringList & other) + { + destroy(); + copy(other); + return *this; + } + virtual ~StringList() + { + destroy(); + } + + StringList * clone() const; + void assign(const StringList *); + + PosibErr<bool> add(ParmStr); + PosibErr<bool> remove(ParmStr); + PosibErr<void> clear(); + + StringEnumeration * elements() const; + StringListEnumeration elements_obj() const + { + return StringListEnumeration(first); + } + + bool empty() const { return first == 0; } + unsigned int size() const { abort(); return 0; } + + }; + + StringList * new_string_list(); + +} +#endif diff --git a/jni/common/string_list.lo b/jni/common/string_list.lo new file mode 100644 index 0000000..248d894 --- /dev/null +++ b/jni/common/string_list.lo @@ -0,0 +1,12 @@ +# common/string_list.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/string_list.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/string_map.cpp b/jni/common/string_map.cpp new file mode 100644 index 0000000..121ddea --- /dev/null +++ b/jni/common/string_map.cpp @@ -0,0 +1,89 @@ +#include <string.h> +#include <assert.h> + +#include "parm_string.hpp" +#include "string_map.hpp" +#include "string_pair.hpp" +#include "string_pair_enumeration.hpp" + +#include "hash-t.hpp" + +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +namespace acommon { + + // needed for darwin + template HashTable<StringMap::Parms>::iterator + HashTable<StringMap::Parms>::find_i(char const* const&, bool&); + template std::pair<HashTable<StringMap::Parms>::iterator,bool> + HashTable<StringMap::Parms>::insert(const StringPair &); + template void HashTable<StringMap::Parms>::init(unsigned int); + template void HashTable<StringMap::Parms>::del(void); + template HashTable<StringMap::Parms>::size_type + HashTable<StringMap::Parms>::erase(char const* const&); + template void BlockSList<StringPair>::clear(void); + + void StringMap::copy(const StringMap & other) + { + lookup_ = other.lookup_; + for (Iter_ i = lookup_.begin(); + !(i == lookup_.end()); // i != lookup_.end() causes problems + // with gcc-2.95 + ++i) + { + i->first = buffer_.dup(i->first); + i->second = buffer_.dup(i->second); + } + } + + + class StringMapEnumeration : public StringPairEnumeration { + StringMap::CIter_ i; + StringMap::CIter_ end; + public: + StringMapEnumeration(StringMap::CIter_ i0, StringMap::CIter_ e0) + : i(i0), end(e0) {} + StringPairEnumeration * clone() const; + void assign(const StringPairEnumeration *); + bool at_end() const; + StringPair next(); + }; + + StringPairEnumeration * StringMapEnumeration::clone() const { + return new StringMapEnumeration(*this); + } + + void + StringMapEnumeration::assign + (const StringPairEnumeration * other) + { + *this = *(const StringMapEnumeration *)(other); + } + + bool StringMapEnumeration::at_end() const { + return i == end; + } + + StringPair StringMapEnumeration::next() { + StringPair temp; + if (i == end) + return temp; + temp = *i; + ++i; + return temp; + } + + StringPairEnumeration * StringMap::elements() const { + return new StringMapEnumeration(lookup_.begin(), lookup_.end()); + } + + StringMap * new_string_map() + { + return new StringMap(); + } +} + diff --git a/jni/common/string_map.hpp b/jni/common/string_map.hpp new file mode 100644 index 0000000..b549b21 --- /dev/null +++ b/jni/common/string_map.hpp @@ -0,0 +1,125 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_STRING_MAP__HPP +#define ASPELL_STRING_MAP__HPP + +#include "mutable_container.hpp" +#include "parm_string.hpp" +#include "posib_err.hpp" +#include "string_pair.hpp" +#include "hash.hpp" +#include "objstack.hpp" + + +namespace acommon { + +class StringPairEnumeration; + +using std::pair; + +class StringMap : public MutableContainer { +public: // but don't use + struct Parms { + typedef StringPair Value; + typedef const char * Key; + const char * key(const Value & v) {return v.first;} + static const bool is_multi = false; + acommon::hash<const char *> hash; + bool equal(const char * x, const char * y) {return strcmp(x,y) == 0;} + }; + typedef StringPair Value_; + typedef HashTable<Parms> Lookup; + typedef Lookup::iterator Iter_; + typedef Lookup::const_iterator CIter_; +private: + HashTable<Parms> lookup_; + ObjStack buffer_; + const char empty_str[1]; + + void copy(const StringMap & other); + + // copy and destructor provided +public: + PosibErr<void> clear() {lookup_.clear(); buffer_.reset(); return no_err;} + + StringMap() : empty_str() {} + StringMap(const StringMap & other) : empty_str() {copy(other);} + StringMap & operator= (const StringMap & o) {clear(); copy(o); return *this;} + ~StringMap() {} + + StringMap * clone() const { + return new StringMap(*this); + } + void assign(const StringMap * other) { + *this = *(const StringMap *)(other); + } + + StringPairEnumeration * elements() const; + + // insert a new element. Will NOT overwrite an existing entry. + // returns false if the element already exists. + bool insert(ParmStr key, ParmStr value) { + pair<Iter_,bool> res = lookup_.insert(Value_(key,0)); + if (res.second) { + res.first->first = buffer_.dup(key); + res.first->second = buffer_.dup(value); + return true; + } else { + return false; + } + } + PosibErr<bool> add(ParmStr key) { + pair<Iter_,bool> res = lookup_.insert(Value_(key,0)); + if (res.second) { + res.first->first = buffer_.dup(key); + res.first->second = empty_str; + return true; + } else { + return false; + } + } + // insert a new element. WILL overwrite an exitsing entry + // always returns true + bool replace(ParmStr key, ParmStr value) { + pair<Iter_,bool> res = lookup_.insert(Value_(key,0)); + if (res.second) { + res.first->first = buffer_.dup(key); + res.first->second = buffer_.dup(value); + } else { + res.first->second = buffer_.dup(value); + } + return true; + } + + // removes an element. Returns true if the element existed. + PosibErr<bool> remove(ParmStr key) {return lookup_.erase(key);} + + // looks up an element. Returns null if the element did not exist. + // returns an empty string if the element exists but has a null value + // otherwise returns the value + const char * lookup(ParmStr key) const + { + CIter_ i = lookup_.find(key); + if (i == lookup_.end()) + return 0; + else + return i->second; + } + + bool have(ParmStr key) const {return lookup(key) != 0;} + + unsigned int size() const {return lookup_.size();} + bool empty() const {return lookup_.empty();} + +}; + +StringMap * new_string_map(); + + +} + +#endif /* ASPELL_STRING_MAP__HPP */ diff --git a/jni/common/string_map.lo b/jni/common/string_map.lo new file mode 100644 index 0000000..2f361d2 --- /dev/null +++ b/jni/common/string_map.lo @@ -0,0 +1,12 @@ +# common/string_map.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/string_map.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/string_pair.hpp b/jni/common/string_pair.hpp new file mode 100644 index 0000000..28d5e75 --- /dev/null +++ b/jni/common/string_pair.hpp @@ -0,0 +1,25 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_STRING_PAIR__HPP +#define ASPELL_STRING_PAIR__HPP + + +namespace acommon { + + +struct StringPair { + const char * first; + const char * second; + StringPair(const char * f, const char * s) + : first(f), second(s) {} + StringPair() : first(""), second("") {} +}; + + +} + +#endif /* ASPELL_STRING_PAIR__HPP */ diff --git a/jni/common/string_pair_enumeration.hpp b/jni/common/string_pair_enumeration.hpp new file mode 100644 index 0000000..3b96f3c --- /dev/null +++ b/jni/common/string_pair_enumeration.hpp @@ -0,0 +1,31 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_STRING_PAIR_ENUMERATION__HPP +#define ASPELL_STRING_PAIR_ENUMERATION__HPP + +#include "string_pair.hpp" + +namespace acommon { + +class StringPairEnumeration; + +class StringPairEnumeration { + public: + virtual bool at_end() const = 0; + virtual StringPair next() = 0; + virtual StringPairEnumeration * clone() const = 0; + virtual void assign(const StringPairEnumeration * other) = 0; + StringPairEnumeration() {} + virtual ~StringPairEnumeration() {} +}; + + +} + +#endif /* ASPELL_STRING_PAIR_ENUMERATION__HPP */ diff --git a/jni/common/strtonum.cpp b/jni/common/strtonum.cpp new file mode 100644 index 0000000..0a55912 --- /dev/null +++ b/jni/common/strtonum.cpp @@ -0,0 +1,95 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Melvin Hadasht and Kevin Atkinson under the +// GNU LGPL license version 2.0 or 2.1. You should have received a +// copy of the LGPL license along with this library if you did not you +// can find it at http://www.gnu.org/. + +#include <stdlib.h> + +#include "strtonum.hpp" +#include "asc_ctype.hpp" + +namespace acommon { + + static double strtodbl_c(const char * nptr, const char ** endptr) + { + double x = 0.0; + double y = 0.0; + double decimal = 1.0; + int negative = 0; + const char * str = nptr; + + while (asc_isspace(*str)) + str++; + if (!*str) + goto END_STRTODBL_C; + if (*str == '-') { + negative = 1; + str++; + } else if (*str == '+') + str++; + if (!*str) + goto END_STRTODBL_C; + while (*str >= '0' && *str <= '9') { + x = x * 10.0 + (*str - '0'); + str++; + } + if (!*str || *str != '.') + goto END_STRTODBL_C; + str++; + decimal = 1.0; + while (*str >= '0' && *str <= '9') { + decimal *= 0.1; + y = y + (*str - '0')*decimal; + str++; + } + END_STRTODBL_C: + if (endptr) + *endptr = (char *) str; + return negative ? -(x + y) : (x + y); + } + + double strtod_c(const char * nptr, const char ** endptr) + { + double x; + const char * eptr; + x = strtodbl_c(nptr, &eptr); + if (*eptr == 'E' || *eptr == 'e') { + const char *nptr2 = eptr; + long int y, i; + double e = 1.0; + nptr2++; + y = strtol(nptr2, (char **)&eptr, 10); + if (y) { + for (i=0; i < ( y < 0 ? -y : y); i++) + e *= 10.0; + x = (y < 0) ? x / e : x * e; + } + } + if (endptr) + *endptr = eptr; + return x; + } + + long strtoi_c(const char * npter, const char ** endptr) { + + char * str = (char*)npter; + long num = 0; + long sign = 1; + + *endptr = str; + while (asc_isspace(*str)) { + str++; + } + if (*str == '-' || *str == '+') { + sign = *(str++) == '-' ? -1 : 1; + } + while (*str >= '0' && *str <= '9' ) { + num = num * 10 + (long)(*str - '0'); + str++; + } + *endptr = str; + return num; + } +} + diff --git a/jni/common/strtonum.hpp b/jni/common/strtonum.hpp new file mode 100644 index 0000000..5eaa287 --- /dev/null +++ b/jni/common/strtonum.hpp @@ -0,0 +1,19 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Melvin Hadasht and Kevin Atkinson under the +// GNU LGPL license version 2.0 or 2.1. You should have received a +// copy of the LGPL license along with this library if you did not you +// can find it at http://www.gnu.org/. + +#ifndef ASPELL_STRTONUM__HPP +#define ASPELL_STRTONUM__HPP + +namespace acommon { + + // Local independent numeric conversion. It is OK if + // nptr == *endptr + double strtod_c(const char * nptr, const char ** endptr); + long strtoi_c(const char * npter, const char ** endptr); + +} + +#endif diff --git a/jni/common/strtonum.lo b/jni/common/strtonum.lo new file mode 100644 index 0000000..635f8ff --- /dev/null +++ b/jni/common/strtonum.lo @@ -0,0 +1,12 @@ +# common/strtonum.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/strtonum.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/tokenizer.cpp b/jni/common/tokenizer.cpp new file mode 100644 index 0000000..2df2eb3 --- /dev/null +++ b/jni/common/tokenizer.cpp @@ -0,0 +1,31 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "tokenizer.hpp" +#include "convert.hpp" + +namespace acommon +{ + + Tokenizer::Tokenizer() + : word_begin(0), word_end(0), end(0), + begin_pos(0), end_pos(0), + conv_(0) + {} + + Tokenizer::~Tokenizer() + {} + + void Tokenizer::reset (FilterChar * begin, FilterChar * end) + { + bool can_encode = conv_->encode(begin, end, buf_); + assert(can_encode); + end_pos = 0; + word_end = begin; + end = end; + } + +} diff --git a/jni/common/tokenizer.hpp b/jni/common/tokenizer.hpp new file mode 100644 index 0000000..e62d1b3 --- /dev/null +++ b/jni/common/tokenizer.hpp @@ -0,0 +1,72 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ACOMMON_TOKENIZER__HPP +#define ACOMMON_TOKENIZER__HPP + +#include "char_vector.hpp" +#include "filter_char.hpp" +#include "filter_char_vector.hpp" + +namespace acommon { + + class Convert; + class Speller; + class Config; + + class Tokenizer { + + public: + Tokenizer(); + virtual ~Tokenizer(); + + FilterChar * word_begin; + FilterChar * word_end; + FilterChar * end; + + CharVector word; // this word is in the final encoded form + unsigned int begin_pos; // pointers back to the original word + unsigned int end_pos; + + // The string passed in _must_ have a null character + // at stop - 1. (ie stop must be one past the end) + void reset (FilterChar * in, FilterChar * stop); + bool at_end() const {return word_begin == word_end;} + + virtual bool advance() = 0; // returns false if there is nothing left + + bool is_begin(unsigned char c) const + {return char_type_[c].begin;} + bool is_middle(unsigned char c) const + {return char_type_[c].middle;} + bool is_end(unsigned char c) const + {return char_type_[c].end;} + bool is_word(unsigned char c) const + {return char_type_[c].word;} + + public: // but don't use + // The speller class is expected to fill these members in + struct CharType { + bool begin; + bool middle; + bool end; + bool word; + CharType() : begin(false), middle(false), end(false), word(false) {} + }; + + CharType char_type_[256]; + Convert * conv_; + FilterCharVector buf_; + }; + + // returns a new tokenizer and sets it up with the given speller + // class + + PosibErr<Tokenizer *> new_tokenizer(Speller *); + +} + +#endif diff --git a/jni/common/tokenizer.lo b/jni/common/tokenizer.lo new file mode 100644 index 0000000..02c8118 --- /dev/null +++ b/jni/common/tokenizer.lo @@ -0,0 +1,12 @@ +# common/tokenizer.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/tokenizer.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/common/type_id.hpp b/jni/common/type_id.hpp new file mode 100644 index 0000000..eb74baf --- /dev/null +++ b/jni/common/type_id.hpp @@ -0,0 +1,27 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_TYPE_ID__HPP +#define ASPELL_TYPE_ID__HPP + +#include "parm_string.hpp" + +namespace acommon { + + +union TypeId { + unsigned int num; + char str[4]; + TypeId(ParmString str); + TypeId() : num(0) {} +}; + + +} + +#endif /* ASPELL_TYPE_ID__HPP */ diff --git a/jni/common/vararray.hpp b/jni/common/vararray.hpp new file mode 100644 index 0000000..184fe6c --- /dev/null +++ b/jni/common/vararray.hpp @@ -0,0 +1,54 @@ + +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_VARARRAY__HPP +#define ASPELL_VARARRAY__HPP + +#ifndef __GNUC__ +# include <stdlib.h> +#endif + +namespace acommon { + +// only use this on types with a trivial constructors destructor + +#ifdef __GNUC__ // use variable arrays + +#define VARARRAY(type, name, num) type name[num] +#define VARARRAYM(type, name, num, max) type name[num] + +#else // use malloc + + struct MallocPtr { + void * ptr; + MallocPtr() : ptr(0) {}; + ~MallocPtr() {if (ptr) free(ptr);} + }; + +#define VARARRAY(type, name, num) \ + acommon::MallocPtr name##_data; \ + name##_data.ptr = malloc(sizeof(type) * (num)); \ + type * name = (type *)name##_data.ptr + +#define VARARRAYM(type, name, num, max) type name[max] + +#endif + +#if 0 // this version uses alloca + +#define VARARRAY(type, name, num) \ + type * name = (type *)alloca(sizeof(type) * (num)) + +#define VARARRAYM(type, name, num, max) \ + type * name = (type *)alloca(sizeof(type) * (num)) + +#endif + +} + +#endif + diff --git a/jni/common/vector.hpp b/jni/common/vector.hpp new file mode 100644 index 0000000..782e4b0 --- /dev/null +++ b/jni/common/vector.hpp @@ -0,0 +1,61 @@ +// This file is part of The New Aspell +// Copyright (C) 2001-2003 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#ifndef ASPELL_VECTOR__HPP +#define ASPELL_VECTOR__HPP + +#include <vector> + +namespace acommon +{ + template <typename T> + class Vector : public std::vector<T> + { + public: + + Vector() {} + Vector(unsigned int s) : std::vector<T>(s) {} + Vector(unsigned int s, const T & val) : std::vector<T>(s, val) {} + + void append(T t) { + this->push_back(t); + } + void append(const T * begin, unsigned int size) { + this->insert(this->end(), begin, begin+size); + } + void append(const T * begin, const T * end) { + this->insert(this->end(), begin, end); + } + int alloc(int s) { + int pos = this->size(); + this->resize(pos + s); + return pos; + } + T * data() {return &*this->begin();} + T * data(int pos) {return &*this->begin() + pos;} + T * data_end() {return &this->back()+1;} + + T * pbegin() {return &*this->begin();} + T * pend() {return &this->back()+1;} + + const T * pbegin() const {return &*this->begin();} + const T * pend() const {return &this->back()+1;} + + template <typename U> + U * datap() { + return reinterpret_cast<U * >(&this->front()); + } + template <typename U> + U * datap(int pos) { + return reinterpret_cast<U * >(&this->front() + pos); + } + + void pop_front() {this->erase(this->begin());} + void push_front(const T & v) {this->insert(this->begin(), v);} + }; +} + +#endif diff --git a/jni/common/word_list.hpp b/jni/common/word_list.hpp new file mode 100644 index 0000000..5762af8 --- /dev/null +++ b/jni/common/word_list.hpp @@ -0,0 +1,30 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#ifndef ASPELL_WORD_LIST__HPP +#define ASPELL_WORD_LIST__HPP + + +namespace acommon { + +class StringEnumeration; + +class WordList { + public: + class Convert * from_internal_; + virtual bool empty() const = 0; + virtual unsigned int size() const = 0; + virtual StringEnumeration * elements() const = 0; + WordList() : from_internal_(0) {} + virtual ~WordList() {} +}; + + +} + +#endif /* ASPELL_WORD_LIST__HPP */ diff --git a/jni/dirs.h b/jni/dirs.h new file mode 100644 index 0000000..9fc2245 --- /dev/null +++ b/jni/dirs.h @@ -0,0 +1,4 @@ +#define PREFIX "/sdcard/aspell" +#define DATA_DIR "<prefix>" +#define DICT_DIR "<prefix>" +#define CONF_DIR "<prefix>" diff --git a/jni/lib/.deps/.dirstamp b/jni/lib/.deps/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/lib/.deps/can_have_error-c.Plo b/jni/lib/.deps/can_have_error-c.Plo new file mode 100644 index 0000000..7a0f6a3 --- /dev/null +++ b/jni/lib/.deps/can_have_error-c.Plo @@ -0,0 +1,16 @@ +lib/can_have_error-c.lo: lib/can_have_error-c.cpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/error.hpp + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/error.hpp: diff --git a/jni/lib/.deps/config-c.Plo b/jni/lib/.deps/config-c.Plo new file mode 100644 index 0000000..6b87d7d --- /dev/null +++ b/jni/lib/.deps/config-c.Plo @@ -0,0 +1,249 @@ +lib/config-c.lo: lib/config-c.cpp common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/error.hpp \ + common/posib_err.hpp common/string.hpp + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/error.hpp: + +common/posib_err.hpp: + +common/string.hpp: diff --git a/jni/lib/.deps/document_checker-c.Plo b/jni/lib/.deps/document_checker-c.Plo new file mode 100644 index 0000000..0107b6c --- /dev/null +++ b/jni/lib/.deps/document_checker-c.Plo @@ -0,0 +1,273 @@ +lib/document_checker-c.lo: lib/document_checker-c.cpp \ + common/document_checker.hpp common/filter.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/error.hpp common/filter_char.hpp \ + common/posib_err.hpp common/string.hpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/char_vector.hpp \ + common/filter_char_vector.hpp common/error.hpp + +common/document_checker.hpp: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/filter_char.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/char_vector.hpp: + +common/filter_char_vector.hpp: + +common/error.hpp: diff --git a/jni/lib/.deps/dummy.Plo b/jni/lib/.deps/dummy.Plo new file mode 100644 index 0000000..b55e314 --- /dev/null +++ b/jni/lib/.deps/dummy.Plo @@ -0,0 +1 @@ +lib/dummy.lo: lib/dummy.cpp diff --git a/jni/lib/.deps/error-c.Plo b/jni/lib/.deps/error-c.Plo new file mode 100644 index 0000000..fb57eda --- /dev/null +++ b/jni/lib/.deps/error-c.Plo @@ -0,0 +1,3 @@ +lib/error-c.lo: lib/error-c.cpp common/error.hpp + +common/error.hpp: diff --git a/jni/lib/.deps/filter-c.Plo b/jni/lib/.deps/filter-c.Plo new file mode 100644 index 0000000..f798b68 --- /dev/null +++ b/jni/lib/.deps/filter-c.Plo @@ -0,0 +1,266 @@ +lib/filter-c.lo: lib/filter-c.cpp common/error.hpp common/filter.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/filter_char.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h + +common/error.hpp: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/filter_char.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: diff --git a/jni/lib/.deps/find_speller.Plo b/jni/lib/.deps/find_speller.Plo new file mode 100644 index 0000000..15278db --- /dev/null +++ b/jni/lib/.deps/find_speller.Plo @@ -0,0 +1,358 @@ +lib/find_speller.lo: lib/find_speller.cpp /usr/include/assert.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/string.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/dirent.h /usr/include/bits/dirent.h \ + /usr/include/bits/posix1_lim.h /usr/include/bits/local_lim.h \ + /usr/include/linux/limits.h common/asc_ctype.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/config.hpp common/can_have_error.hpp \ + common/key_info.hpp common/posib_err.hpp common/string.hpp \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/alloca.h \ + /usr/include/bits/stdlib.h /usr/include/c++/4.5/algorithm \ + /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix2_lim.h \ + /usr/include/bits/xopen_lim.h /usr/include/bits/stdio_lim.h \ + common/mutable_string.hpp common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/convert.hpp \ + common/char_vector.hpp common/filter_char.hpp \ + common/filter_char_vector.hpp common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/cache.hpp \ + common/enumeration.hpp common/clone_ptr-t.hpp common/clone_ptr.hpp \ + /usr/include/c++/4.5/typeinfo common/errors.hpp common/filter.hpp \ + common/fstream.hpp common/getdata.hpp common/info.hpp common/type_id.hpp \ + common/speller.hpp common/stack_ptr.hpp common/string_enumeration.hpp \ + common/string_list.hpp common/string_enumeration.hpp \ + common/mutable_container.hpp /usr/include/c++/4.5/cstdio \ + common/string_map.hpp common/hash.hpp /usr/include/c++/4.5/functional \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h gen/settings.h \ + common/block_slist.hpp common/objstack.hpp common/gettext.h \ + /usr/include/libintl.h + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/string.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/dirent.h: + +/usr/include/bits/dirent.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +common/asc_ctype.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +common/errors.hpp: + +common/filter.hpp: + +common/fstream.hpp: + +common/getdata.hpp: + +common/info.hpp: + +common/type_id.hpp: + +common/speller.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/mutable_container.hpp: + +/usr/include/c++/4.5/cstdio: + +common/string_map.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +gen/settings.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/lib/.deps/info-c.Plo b/jni/lib/.deps/info-c.Plo new file mode 100644 index 0000000..d2ee38f --- /dev/null +++ b/jni/lib/.deps/info-c.Plo @@ -0,0 +1,210 @@ +lib/info-c.lo: lib/info-c.cpp common/info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + common/type_id.hpp + +common/info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/type_id.hpp: diff --git a/jni/lib/.deps/mutable_container-c.Plo b/jni/lib/.deps/mutable_container-c.Plo new file mode 100644 index 0000000..86d62aa --- /dev/null +++ b/jni/lib/.deps/mutable_container-c.Plo @@ -0,0 +1,208 @@ +lib/mutable_container-c.lo: lib/mutable_container-c.cpp \ + common/mutable_container.hpp common/parm_string.hpp \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/posib_err.hpp common/string.hpp \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/mutable_string.hpp common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp + +common/mutable_container.hpp: + +common/parm_string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: diff --git a/jni/lib/.deps/new_checker.Plo b/jni/lib/.deps/new_checker.Plo new file mode 100644 index 0000000..040306a --- /dev/null +++ b/jni/lib/.deps/new_checker.Plo @@ -0,0 +1,291 @@ +lib/new_checker.lo: lib/new_checker.cpp common/speller.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/clone_ptr.hpp common/mutable_string.hpp \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/posib_err.hpp common/string.hpp \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp \ + common/char_vector.hpp common/document_checker.hpp common/filter.hpp \ + common/filter_char.hpp common/vector.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/filter_char_vector.hpp \ + common/stack_ptr.hpp /usr/include/assert.h common/convert.hpp \ + common/stack_ptr.hpp common/cache.hpp common/tokenizer.hpp + +common/speller.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/clone_ptr.hpp: + +common/mutable_string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/char_vector.hpp: + +common/document_checker.hpp: + +common/filter.hpp: + +common/filter_char.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/convert.hpp: + +common/stack_ptr.hpp: + +common/cache.hpp: + +common/tokenizer.hpp: diff --git a/jni/lib/.deps/new_config.Plo b/jni/lib/.deps/new_config.Plo new file mode 100644 index 0000000..fd2dae9 --- /dev/null +++ b/jni/lib/.deps/new_config.Plo @@ -0,0 +1,271 @@ +lib/new_config.lo: lib/new_config.cpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/errors.hpp common/filter.hpp \ + common/filter_char.hpp common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/errors.hpp: + +common/filter.hpp: + +common/filter_char.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: diff --git a/jni/lib/.deps/new_filter.Plo b/jni/lib/.deps/new_filter.Plo new file mode 100644 index 0000000..da61772 --- /dev/null +++ b/jni/lib/.deps/new_filter.Plo @@ -0,0 +1,376 @@ +lib/new_filter.lo: lib/new_filter.cpp gen/settings.h common/cache-t.hpp \ + common/lock.hpp /usr/include/assert.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h /usr/include/pthread.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sched.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/time.h /usr/include/bits/sched.h /usr/include/bits/time.h \ + /usr/include/xlocale.h /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/setjmp.h common/cache.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/bits/string3.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/sys/types.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + common/asc_ctype.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/key_info.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/enumeration.hpp \ + common/clone_ptr-t.hpp common/clone_ptr.hpp \ + /usr/include/c++/4.5/typeinfo common/errors.hpp common/filter.hpp \ + common/filter_char.hpp common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h lib/filter_entry.hpp common/indiv_filter.hpp \ + common/fstream.hpp common/getdata.hpp common/iostream.hpp \ + common/fstream.hpp common/itemize.hpp common/key_info.hpp \ + common/parm_string.hpp common/posib_err.hpp common/stack_ptr.hpp \ + common/string_enumeration.hpp common/type_id.hpp common/char_vector.hpp \ + common/string_list.hpp common/string_enumeration.hpp \ + common/mutable_container.hpp /usr/include/c++/4.5/cstdio \ + common/string_map.hpp common/hash.hpp /usr/include/c++/4.5/functional \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h common/block_slist.hpp \ + common/objstack.hpp common/strtonum.hpp common/file_util.hpp \ + /usr/include/dlfcn.h /usr/include/bits/dlfcn.h \ + gen/static_filters.src.cpp + +gen/settings.h: + +common/cache-t.hpp: + +common/lock.hpp: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/pthread.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sched.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/time.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/time.h: + +/usr/include/xlocale.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/bits/setjmp.h: + +common/cache.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/sys/types.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/asc_ctype.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +common/errors.hpp: + +common/filter.hpp: + +common/filter_char.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +lib/filter_entry.hpp: + +common/indiv_filter.hpp: + +common/fstream.hpp: + +common/getdata.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/itemize.hpp: + +common/key_info.hpp: + +common/parm_string.hpp: + +common/posib_err.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/char_vector.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/mutable_container.hpp: + +/usr/include/c++/4.5/cstdio: + +common/string_map.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/strtonum.hpp: + +common/file_util.hpp: + +/usr/include/dlfcn.h: + +/usr/include/bits/dlfcn.h: + +gen/static_filters.src.cpp: diff --git a/jni/lib/.deps/new_fmode.Plo b/jni/lib/.deps/new_fmode.Plo new file mode 100644 index 0000000..315a97f --- /dev/null +++ b/jni/lib/.deps/new_fmode.Plo @@ -0,0 +1,346 @@ +lib/new_fmode.lo: lib/new_fmode.cpp gen/settings.h \ + /usr/include/sys/types.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/regex.h \ + /usr/include/gnu/option-groups.h common/stack_ptr.hpp \ + /usr/include/assert.h common/cache-t.hpp common/lock.hpp \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/bits/sched.h \ + /usr/include/xlocale.h /usr/include/bits/setjmp.h common/cache.hpp \ + common/posib_err.hpp common/string.hpp /usr/include/string.h \ + /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + common/string.hpp common/vector.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/key_info.hpp common/vector.hpp common/errors.hpp \ + common/filter.hpp common/filter_char.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + common/string_enumeration.hpp common/type_id.hpp common/char_vector.hpp \ + common/string_list.hpp common/string_enumeration.hpp \ + common/mutable_container.hpp /usr/include/c++/4.5/cstdio \ + common/posib_err.hpp common/file_util.hpp common/fstream.hpp \ + common/getdata.hpp common/strtonum.hpp common/asc_ctype.hpp \ + common/iostream.hpp common/fstream.hpp common/gettext.h \ + /usr/include/libintl.h + +gen/settings.h: + +/usr/include/sys/types.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/regex.h: + +/usr/include/gnu/option-groups.h: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/cache-t.hpp: + +common/lock.hpp: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/bits/sched.h: + +/usr/include/xlocale.h: + +/usr/include/bits/setjmp.h: + +common/cache.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/string.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +common/errors.hpp: + +common/filter.hpp: + +common/filter_char.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/char_vector.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/mutable_container.hpp: + +/usr/include/c++/4.5/cstdio: + +common/posib_err.hpp: + +common/file_util.hpp: + +common/fstream.hpp: + +common/getdata.hpp: + +common/strtonum.hpp: + +common/asc_ctype.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/lib/.deps/speller-c.Plo b/jni/lib/.deps/speller-c.Plo new file mode 100644 index 0000000..0e13b90 --- /dev/null +++ b/jni/lib/.deps/speller-c.Plo @@ -0,0 +1,292 @@ +lib/speller-c.lo: lib/speller-c.cpp common/convert.hpp common/string.hpp \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/posib_err.hpp common/error.hpp \ + common/errors.hpp common/ndebug.hpp common/char_vector.hpp \ + common/filter_char.hpp common/filter_char_vector.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/stack_ptr.hpp \ + /usr/include/assert.h common/filter.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/cache.hpp common/error.hpp \ + common/mutable_string.hpp common/posib_err.hpp common/speller.hpp \ + common/clone_ptr.hpp common/word_list.hpp + +common/convert.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +common/error.hpp: + +common/mutable_string.hpp: + +common/posib_err.hpp: + +common/speller.hpp: + +common/clone_ptr.hpp: + +common/word_list.hpp: diff --git a/jni/lib/.deps/string_enumeration-c.Plo b/jni/lib/.deps/string_enumeration-c.Plo new file mode 100644 index 0000000..e05d28d --- /dev/null +++ b/jni/lib/.deps/string_enumeration-c.Plo @@ -0,0 +1,283 @@ +lib/string_enumeration-c.lo: lib/string_enumeration-c.cpp \ + common/convert.hpp common/string.hpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/posib_err.hpp common/error.hpp \ + common/errors.hpp common/ndebug.hpp common/char_vector.hpp \ + common/filter_char.hpp common/filter_char_vector.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/stack_ptr.hpp \ + /usr/include/assert.h common/filter.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/cache.hpp \ + common/string_enumeration.hpp common/type_id.hpp + +common/convert.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: diff --git a/jni/lib/.deps/string_list-c.Plo b/jni/lib/.deps/string_list-c.Plo new file mode 100644 index 0000000..5efb1cd --- /dev/null +++ b/jni/lib/.deps/string_list-c.Plo @@ -0,0 +1,239 @@ +lib/string_list-c.lo: lib/string_list-c.cpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + common/string_list.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/char_vector.hpp common/mutable_container.hpp common/posib_err.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + /usr/include/c++/4.5/cstdio + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/char_vector.hpp: + +common/mutable_container.hpp: + +common/posib_err.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +/usr/include/c++/4.5/cstdio: diff --git a/jni/lib/.deps/string_map-c.Plo b/jni/lib/.deps/string_map-c.Plo new file mode 100644 index 0000000..bf995ca --- /dev/null +++ b/jni/lib/.deps/string_map-c.Plo @@ -0,0 +1,234 @@ +lib/string_map-c.lo: lib/string_map-c.cpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + common/string_map.hpp common/mutable_container.hpp common/posib_err.hpp \ + common/string_pair.hpp common/hash.hpp /usr/include/c++/4.5/functional \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h gen/settings.h \ + common/block_slist.hpp common/objstack.hpp /usr/include/assert.h + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/string_map.hpp: + +common/mutable_container.hpp: + +common/posib_err.hpp: + +common/string_pair.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +gen/settings.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +/usr/include/assert.h: diff --git a/jni/lib/.deps/string_pair_enumeration-c.Plo b/jni/lib/.deps/string_pair_enumeration-c.Plo new file mode 100644 index 0000000..3a957ca --- /dev/null +++ b/jni/lib/.deps/string_pair_enumeration-c.Plo @@ -0,0 +1,9 @@ +lib/string_pair_enumeration-c.lo: lib/string_pair_enumeration-c.cpp \ + common/string_pair.hpp common/string_pair_enumeration.hpp \ + common/string_pair.hpp + +common/string_pair.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: diff --git a/jni/lib/.deps/word_list-c.Plo b/jni/lib/.deps/word_list-c.Plo new file mode 100644 index 0000000..b10e25d --- /dev/null +++ b/jni/lib/.deps/word_list-c.Plo @@ -0,0 +1,205 @@ +lib/word_list-c.lo: lib/word_list-c.cpp common/string_enumeration.hpp \ + common/parm_string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/type_id.hpp common/char_vector.hpp \ + common/string.hpp /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/mutable_string.hpp common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/word_list.hpp + +common/string_enumeration.hpp: + +common/parm_string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/type_id.hpp: + +common/char_vector.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/word_list.hpp: diff --git a/jni/lib/.dirstamp b/jni/lib/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/lib/Makefile b/jni/lib/Makefile new file mode 100644 index 0000000..9141085 --- /dev/null +++ b/jni/lib/Makefile @@ -0,0 +1,4 @@ +top_srcdir = .. + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/lib/Makefile.in b/jni/lib/Makefile.in new file mode 100644 index 0000000..60bc80d --- /dev/null +++ b/jni/lib/Makefile.in @@ -0,0 +1,4 @@ +top_srcdir = @top_srcdir@ + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/lib/can_have_error-c.cpp b/jni/lib/can_have_error-c.cpp new file mode 100644 index 0000000..0a5057b --- /dev/null +++ b/jni/lib/can_have_error-c.cpp @@ -0,0 +1,40 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "can_have_error.hpp" +#include "error.hpp" + +namespace acommon { + +class CanHaveError; +struct Error; + +extern "C" unsigned int aspell_error_number(const CanHaveError * ths) +{ + return ths->err_ == 0 ? 0 : 1; +} + +extern "C" const char * aspell_error_message(const CanHaveError * ths) +{ + return ths->err_ ? ths->err_->mesg : ""; +} + +extern "C" const Error * aspell_error(const CanHaveError * ths) +{ + return ths->err_; +} + +extern "C" void delete_aspell_can_have_error(CanHaveError * ths) +{ + delete ths; +} + + + +} + diff --git a/jni/lib/can_have_error-c.lo b/jni/lib/can_have_error-c.lo new file mode 100644 index 0000000..b4c675c --- /dev/null +++ b/jni/lib/can_have_error-c.lo @@ -0,0 +1,12 @@ +# lib/can_have_error-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/can_have_error-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/config-c.cpp b/jni/lib/config-c.cpp new file mode 100644 index 0000000..183f4f9 --- /dev/null +++ b/jni/lib/config-c.cpp @@ -0,0 +1,172 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "config.hpp" +#include "error.hpp" +#include "posib_err.hpp" +#include "string.hpp" + +namespace acommon { + +class Config; +struct Error; +struct KeyInfo; +class KeyInfoEnumeration; +class MutableContainer; +class StringPairEnumeration; + +extern "C" int aspell_key_info_enumeration_at_end(const KeyInfoEnumeration * ths) +{ + return ths->at_end(); +} + +extern "C" const KeyInfo * aspell_key_info_enumeration_next(KeyInfoEnumeration * ths) +{ + return ths->next(); +} + +extern "C" void delete_aspell_key_info_enumeration(KeyInfoEnumeration * ths) +{ + delete ths; +} + +extern "C" KeyInfoEnumeration * aspell_key_info_enumeration_clone(const KeyInfoEnumeration * ths) +{ + return ths->clone(); +} + +extern "C" void aspell_key_info_enumeration_assign(KeyInfoEnumeration * ths, const KeyInfoEnumeration * other) +{ + ths->assign(other); +} + +extern "C" Config * new_aspell_config() +{ + return new_config(); +} + +extern "C" void delete_aspell_config(Config * ths) +{ + delete ths; +} + +extern "C" Config * aspell_config_clone(const Config * ths) +{ + return ths->clone(); +} + +extern "C" void aspell_config_assign(Config * ths, const Config * other) +{ + ths->assign(other); +} + +extern "C" unsigned int aspell_config_error_number(const Config * ths) +{ + return ths->err_ == 0 ? 0 : 1; +} + +extern "C" const char * aspell_config_error_message(const Config * ths) +{ + return ths->err_ ? ths->err_->mesg : ""; +} + +extern "C" const Error * aspell_config_error(const Config * ths) +{ + return ths->err_; +} + +extern "C" void aspell_config_set_extra(Config * ths, const KeyInfo * begin, const KeyInfo * end) +{ + ths->set_extra(begin, end); +} + +extern "C" const KeyInfo * aspell_config_keyinfo(Config * ths, const char * key) +{ + PosibErr<const KeyInfo *> ret = ths->keyinfo(key); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + return ret.data; +} + +extern "C" KeyInfoEnumeration * aspell_config_possible_elements(Config * ths, int include_extra) +{ + return ths->possible_elements(include_extra); +} + +extern "C" const char * aspell_config_get_default(Config * ths, const char * key) +{ + PosibErr<String> ret = ths->get_default(key); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + ths->temp_str = ret.data; + return ths->temp_str.c_str(); +} + +extern "C" StringPairEnumeration * aspell_config_elements(Config * ths) +{ + return ths->elements(); +} + +extern "C" int aspell_config_replace(Config * ths, const char * key, const char * value) +{ + PosibErr<void> ret = ths->replace(key, value); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + return 1; +} + +extern "C" int aspell_config_remove(Config * ths, const char * key) +{ + PosibErr<void> ret = ths->remove(key); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + return 1; +} + +extern "C" int aspell_config_have(const Config * ths, const char * key) +{ + return ths->have(key); +} + +extern "C" const char * aspell_config_retrieve(Config * ths, const char * key) +{ + PosibErr<String> ret = ths->retrieve(key); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + ths->temp_str = ret.data; + return ths->temp_str.c_str(); +} + +extern "C" int aspell_config_retrieve_list(Config * ths, const char * key, MutableContainer * lst) +{ + PosibErr<void> ret = ths->retrieve_list(key, lst); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + return 1; +} + +extern "C" int aspell_config_retrieve_bool(Config * ths, const char * key) +{ + PosibErr<bool> ret = ths->retrieve_bool(key); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return -1; + return ret.data; +} + +extern "C" int aspell_config_retrieve_int(Config * ths, const char * key) +{ + PosibErr<unsigned int> ret = ths->retrieve_int(key); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return -1; + return ret.data; +} + + + +} + diff --git a/jni/lib/config-c.lo b/jni/lib/config-c.lo new file mode 100644 index 0000000..fc44ced --- /dev/null +++ b/jni/lib/config-c.lo @@ -0,0 +1,12 @@ +# lib/config-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/config-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/document_checker-c.cpp b/jni/lib/document_checker-c.cpp new file mode 100644 index 0000000..ffce994 --- /dev/null +++ b/jni/lib/document_checker-c.cpp @@ -0,0 +1,78 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "document_checker.hpp" +#include "error.hpp" + +namespace acommon { + +class CanHaveError; +class DocumentChecker; +struct Error; +class Filter; +class Speller; + +extern "C" void delete_aspell_document_checker(DocumentChecker * ths) +{ + delete ths; +} + +extern "C" unsigned int aspell_document_checker_error_number(const DocumentChecker * ths) +{ + return ths->err_ == 0 ? 0 : 1; +} + +extern "C" const char * aspell_document_checker_error_message(const DocumentChecker * ths) +{ + return ths->err_ ? ths->err_->mesg : ""; +} + +extern "C" const Error * aspell_document_checker_error(const DocumentChecker * ths) +{ + return ths->err_; +} + +extern "C" CanHaveError * new_aspell_document_checker(Speller * speller) +{ + PosibErr<DocumentChecker *> ret = new_document_checker(speller); + if (ret.has_err()) { + return new CanHaveError(ret.release_err()); + } else { + return ret; + } +} + +extern "C" DocumentChecker * to_aspell_document_checker(CanHaveError * obj) +{ + return static_cast<DocumentChecker *>(obj); +} + +extern "C" void aspell_document_checker_reset(DocumentChecker * ths) +{ + ths->reset(); +} + +extern "C" void aspell_document_checker_process(DocumentChecker * ths, const char * str, int size) +{ + ths->process(str, size); +} + +extern "C" Token aspell_document_checker_next_misspelling(DocumentChecker * ths) +{ + return ths->next_misspelling(); +} + +extern "C" Filter * aspell_document_checker_filter(DocumentChecker * ths) +{ + return ths->filter(); +} + + + +} + diff --git a/jni/lib/document_checker-c.lo b/jni/lib/document_checker-c.lo new file mode 100644 index 0000000..7675c1f --- /dev/null +++ b/jni/lib/document_checker-c.lo @@ -0,0 +1,12 @@ +# lib/document_checker-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/document_checker-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/dummy.cpp b/jni/lib/dummy.cpp new file mode 100644 index 0000000..0d660cc --- /dev/null +++ b/jni/lib/dummy.cpp @@ -0,0 +1 @@ +void pspell_aspell_dummy() {} diff --git a/jni/lib/dummy.lo b/jni/lib/dummy.lo new file mode 100644 index 0000000..5ba0ddf --- /dev/null +++ b/jni/lib/dummy.lo @@ -0,0 +1,12 @@ +# lib/dummy.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/dummy.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/error-c.cpp b/jni/lib/error-c.cpp new file mode 100644 index 0000000..87caa51 --- /dev/null +++ b/jni/lib/error-c.cpp @@ -0,0 +1,24 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "error.hpp" + +namespace acommon { + +struct Error; +struct ErrorInfo; + +extern "C" int aspell_error_is_a(const Error * ths, const ErrorInfo * e) +{ + return ths->is_a(e); +} + + + +} + diff --git a/jni/lib/error-c.lo b/jni/lib/error-c.lo new file mode 100644 index 0000000..0a211e9 --- /dev/null +++ b/jni/lib/error-c.lo @@ -0,0 +1,12 @@ +# lib/error-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/error-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/filter-c.cpp b/jni/lib/filter-c.cpp new file mode 100644 index 0000000..75d1d83 --- /dev/null +++ b/jni/lib/filter-c.cpp @@ -0,0 +1,46 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "error.hpp" +#include "filter.hpp" + +namespace acommon { + +class CanHaveError; +struct Error; +class Filter; + +extern "C" void delete_aspell_filter(Filter * ths) +{ + delete ths; +} + +extern "C" unsigned int aspell_filter_error_number(const Filter * ths) +{ + return ths->err_ == 0 ? 0 : 1; +} + +extern "C" const char * aspell_filter_error_message(const Filter * ths) +{ + return ths->err_ ? ths->err_->mesg : ""; +} + +extern "C" const Error * aspell_filter_error(const Filter * ths) +{ + return ths->err_; +} + +extern "C" Filter * to_aspell_filter(CanHaveError * obj) +{ + return static_cast<Filter *>(obj); +} + + + +} + diff --git a/jni/lib/filter-c.lo b/jni/lib/filter-c.lo new file mode 100644 index 0000000..0d3673b --- /dev/null +++ b/jni/lib/filter-c.lo @@ -0,0 +1,12 @@ +# lib/filter-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/filter-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/filter_entry.hpp b/jni/lib/filter_entry.hpp new file mode 100644 index 0000000..e96324c --- /dev/null +++ b/jni/lib/filter_entry.hpp @@ -0,0 +1,19 @@ +#ifndef FILTER_ENTRY_HEADER +#define FILTER_ENTRY_HEADER + +#include "indiv_filter.hpp" + +namespace acommon { + + typedef IndividualFilter * (FilterFun) (); + + struct FilterEntry + { + const char * name; + FilterFun * decoder; + FilterFun * filter; + FilterFun * encoder; + }; +}; +#endif + diff --git a/jni/lib/find_speller.cpp b/jni/lib/find_speller.cpp new file mode 100644 index 0000000..3ea469c --- /dev/null +++ b/jni/lib/find_speller.cpp @@ -0,0 +1,494 @@ +// This file is part of The New Aspell +// Copyright (C) 2000-2001 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +#include <assert.h> +#include <string.h> + +// POSIX includes +#include <sys/types.h> +#include <dirent.h> + +#include "asc_ctype.hpp" +#include "can_have_error.hpp" +#include "config.hpp" +#include "convert.hpp" +#include "enumeration.hpp" +#include "errors.hpp" +#include "filter.hpp" +#include "fstream.hpp" +#include "getdata.hpp" +#include "info.hpp" +#include "speller.hpp" +#include "stack_ptr.hpp" +#include "string_enumeration.hpp" +#include "string_list.hpp" +#include "string_map.hpp" + +#include "gettext.h" + +#if 0 +#include "preload.h" +#define LT_NON_POSIX_NAMESPACE 1 +#ifdef USE_LTDL +#include <ltdl.h> +#endif +#endif + +using namespace acommon; + +namespace acommon { + + static void free_lt_handle(SpellerLtHandle h) + { +#ifdef USE_LTDL + int s; + s = lt_dlclose((lt_dlhandle)h); + assert (s == 0); + s = lt_dlexit(); + assert (s == 0); +#endif + } + + extern "C" + Speller * libaspell_speller_default_LTX_new_speller_class(SpellerLtHandle); + + PosibErr<Speller *> get_speller_class(Config * config) + { + String name = config->retrieve("module"); + assert(name == "default"); + return libaspell_speller_default_LTX_new_speller_class(0); +#if 0 + unsigned int i; + for (i = 0; i != aspell_speller_funs_size; ++i) { + if (strcmp(name.c_str(), aspell_speller_funs[i].name) == 0) { + return (*aspell_speller_funs[i].fun)(config, 0); + } + } + +#ifdef USE_LTDL + int s = lt_dlinit(); + assert(s == 0); + String libname; + libname = LIBDIR "/libaspell_"; + libname += name; + libname += ".la"; + lt_dlhandle h = lt_dlopen (libname.c_str()); + if (h == 0) + return (new CanHaveErrorImpl()) + ->set_error(cant_load_module, name.c_str()); + lt_ptr_t fun = lt_dlsym (h, "new_aspell_speller_class"); + assert (fun != 0); + CanHaveError * m = (*(NewSpellerClass)(fun))(config, h); + assert (m != 0); + if (m->error_number() != 0) + free_lt_handle(h); + return m; +#else + return (new CanHaveErrorImpl()) + ->set_error(cant_load_module, name.c_str()); +#endif +#endif + } + + // Note this writes all over str + static void split_string_list(StringList & list, ParmString str) + { + const char * s0 = str; + const char * s1; + while (true) { + while (*s0 != '\0' && asc_isspace(*s0)) ++s0; + if (*s0 == '\0') break; + s1 = s0; + while (!asc_isspace(*s1)) ++s1; + String temp(s0,s1-s0); + list.add(temp); + if (*s1 != '\0') + s0 = s1 + 1; + } + } + + enum IsBetter {BetterMatch, WorseMatch, SameMatch}; + + struct Better + { + unsigned int cur_rank; + unsigned int best_rank; + unsigned int worst_rank; + virtual void init() = 0; + virtual void set_best_from_cur() = 0; + virtual void set_cur_rank() = 0; + IsBetter better_match(IsBetter prev); + virtual ~Better(); + }; + + Better::~Better() {} + + IsBetter Better::better_match (IsBetter prev) + { + if (prev == WorseMatch) + return prev; + set_cur_rank(); + if (cur_rank >= worst_rank) + return WorseMatch; + else if (cur_rank < best_rank) + return BetterMatch; + else if (cur_rank == best_rank) + return prev; + else // cur_rank > best_rank + if (prev == SameMatch) + return WorseMatch; + else + return BetterMatch; + } + + struct BetterList : public Better + { + const char * cur; + StringList list; + const char * best; + BetterList(); + void init(); + void set_best_from_cur(); + void set_cur_rank(); + }; + + BetterList::BetterList() + { + } + + void BetterList::init() { + StringListEnumeration es = list.elements_obj(); + worst_rank = 0; + while ( (es.next()) != 0) + ++worst_rank; + best_rank = worst_rank; + } + + void BetterList::set_best_from_cur() + { + best_rank = cur_rank; + best = cur; + } + + void BetterList::set_cur_rank() + { + StringListEnumeration es = list.elements_obj(); + const char * m; + cur_rank = 0; + while ( (m = es.next()) != 0 && strcmp(m, cur) != 0) + ++cur_rank; + } + + struct BetterSize : public Better + { + unsigned int cur; + const char * cur_str; + char req_type; + unsigned int requested; + unsigned int size; + unsigned int best; + const char * best_str; + void init(); + void set_best_from_cur(); + void set_cur_rank(); + }; + + + void BetterSize::init() { + worst_rank = 0xFFF; + best_rank = worst_rank; + } + + void BetterSize::set_best_from_cur() + { + best_rank = cur_rank; + best = cur; + best_str = cur_str; + } + + void BetterSize::set_cur_rank() + { + int diff = cur - requested; + int sign; + if (diff < 0) { + cur_rank = -diff; + sign = -1; + } else { + cur_rank = diff; + sign = 1; + } + cur_rank <<= 1; + if ((sign == -1 && req_type == '+') || (sign == 1 && req_type == '-')) + cur_rank |= 0x1; + else if ((sign == -1 && req_type == '>') || (sign == 1 && req_type == '<')) + cur_rank |= 0x100; + } + + struct BetterVariety : public Better + { + const char * cur; + StringList list; + const char * best; + BetterVariety() {} + void init(); + void set_best_from_cur(); + void set_cur_rank(); + }; + + void BetterVariety::init() { + worst_rank = 3; + best_rank = 3; + } + + void BetterVariety::set_best_from_cur() + { + best_rank = cur_rank; + best = cur; + } + + void BetterVariety::set_cur_rank() + { + if (strlen(cur) == 0) { + cur_rank = 2; + } else { + StringListEnumeration es = list.elements_obj(); + const char * m; + cur_rank = 3; + unsigned list_size = 0, num = 0; + while ( (m = es.next()) != 0 ) { + ++list_size; + unsigned s = strlen(m); + const char * c = cur; + unsigned p; + bool match = false; + num = 0; + for (; *c != '\0'; c += p) { + ++num; + p = strcspn(c, "-"); + if (p == s && memcmp(m, c, s) == 0) {match = true; break;} + if (c[p] == '-') p++; + } + if (!match) goto fail; + cur_rank = 0; + } + if (cur_rank == 0 && num != list_size) cur_rank = 1; + } + return; + fail: + cur_rank = 3; + } + + PosibErr<Config *> find_word_list(Config * c) + { + Config * config = new_config(); + RET_ON_ERR(config->read_in_settings(c)); + String dict_name; + + if (config->have("master")) { + dict_name = config->retrieve("master"); + + } else { + + //////////////////////////////////////////////////////////////////// + // + // Give first preference to an exact match for the language-country + // code, then give preference to those in the alternate code list + // in the order they are presented, then if there is no match + // look for one for just language. If that fails give up. + // Once the best matching code is found, try to find a matching + // variety if one exists, other wise look for one with no variety. + // + + BetterList b_code; + //BetterList b_jargon; + BetterVariety b_variety; + BetterList b_module; + BetterSize b_size; + Better * better[4] = {&b_code,&b_variety,&b_module,&b_size}; + const DictInfo * best = 0; + + // + // retrieve and normalize code + // + const char * p; + String code; + PosibErr<String> str = config->retrieve("lang"); + p = str.data.c_str(); + while (asc_isalpha(*p)) + code += asc_tolower(*p++); + String lang = code; + bool have_country = false; + if (*p == '-' || *p == '_') { + ++p; + have_country = true; + code += '_'; + while (asc_isalpha(*p)) + code += asc_toupper(*p++); + } + + // + // Retrieve acceptable code search orders + // + String lang_country_list; + if (have_country) { + lang_country_list = code; + lang_country_list += ' '; + } + String lang_only_list = lang; + lang_only_list += ' '; + + // read retrieve lang_country_list and lang_only_list from file(s) + // FIXME: Write Me + + // + split_string_list(b_code.list, lang_country_list); + split_string_list(b_code.list, lang_only_list); + b_code.init(); + + // + // Retrieve Variety + // + config->retrieve_list("variety", &b_variety.list); + if (b_variety.list.empty() && config->have("jargon")) + b_variety.list.add(config->retrieve("jargon")); + b_variety.init(); + str.data.clear(); + + // + // Retrieve module list + // + if (config->have("module")) + b_module.list.add(config->retrieve("module")); + else if (config->have("module-search-order")) + config->retrieve_list("module-search-order", &b_module.list); + { + StackPtr<ModuleInfoEnumeration> els(get_module_info_list(config)->elements()); + const ModuleInfo * entry; + while ( (entry = els->next()) != 0) + b_module.list.add(entry->name); + } + b_module.init(); + + // + // Retrieve size + // + str = config->retrieve("size"); + p = str.data.c_str(); + if (p[0] == '+' || p[0] == '-' || p[0] == '<' || p[0] == '>') { + b_size.req_type = p[0]; + ++p; + } else { + b_size.req_type = '+'; + } + if (!asc_isdigit(p[0]) || !asc_isdigit(p[1]) || p[2] != '\0') + abort(); //FIXME: create an error condition here + b_size.requested = atoi(p); + b_size.init(); + + // + // + // + + const DictInfoList * dlist = get_dict_info_list(config); + DictInfoEnumeration * dels = dlist->elements(); + const DictInfo * entry; + + while ( (entry = dels->next()) != 0) { + + b_code .cur = entry->code; + b_module.cur = entry->module->name; + + b_variety.cur = entry->variety; + + b_size.cur_str = entry->size_str; + b_size.cur = entry->size; + + // + // check to see if we got a better match than the current + // best_match if any + // + + IsBetter is_better = SameMatch; + for (int i = 0; i != 4; ++i) + is_better = better[i]->better_match(is_better); + + if (is_better == BetterMatch) { + for (int i = 0; i != 4; ++i) + better[i]->set_best_from_cur(); + best = entry; + } + } + + delete dels; + + // + // set config to best match + // + if (best != 0) { + String main_wl,flags; + PosibErrBase ret = get_dict_file_name(best, main_wl, flags); + if (ret.has_err()) { + delete config; + return ret; + } + dict_name = best->name; + config->replace("lang", b_code.best); + config->replace("language-tag", b_code.best); + config->replace("master", main_wl.c_str()); + config->replace("master-flags", flags.c_str()); + config->replace("module", b_module.best); + config->replace("jargon", b_variety.best); + config->replace("clear-variety", ""); + unsigned p; + for (const char * c = b_module.best; *c != '\0'; c += p) { + p = strcspn(c, "-"); + config->replace("add-variety", String(c, p)); + } + config->replace("size", b_size.best_str); + } else { + delete config; + return make_err(no_wordlist_for_lang, code); + } + } + + const StringMap * dict_aliases = get_dict_aliases(config); + const char * val = dict_aliases->lookup(dict_name); + if (val) config->replace("master", val); + return config; + } + + PosibErr<void> reload_filters(Speller * m) + { + m->to_internal_->filter.clear(); + m->from_internal_->filter.clear(); + // Add enocder and decoder filters if any + RET_ON_ERR(setup_filter(m->to_internal_->filter, m->config(), + true, false, false)); + RET_ON_ERR(setup_filter(m->from_internal_->filter, m->config(), + false, false, true)); + return no_err; + } + + PosibErr<Speller *> new_speller(Config * c0) + { + aspell_gettext_init(); + + RET_ON_ERR_SET(find_word_list(c0), Config *, c); + StackPtr<Speller> m(get_speller_class(c)); + RET_ON_ERR(m->setup(c)); + + RET_ON_ERR(reload_filters(m)); + + return m.release(); + } + + void delete_speller(Speller * m) + { + SpellerLtHandle h = ((Speller *)(m))->lt_handle(); + delete m; + if (h != 0) free_lt_handle(h); + } +} diff --git a/jni/lib/find_speller.lo b/jni/lib/find_speller.lo new file mode 100644 index 0000000..af2d2cf --- /dev/null +++ b/jni/lib/find_speller.lo @@ -0,0 +1,12 @@ +# lib/find_speller.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/find_speller.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/info-c.cpp b/jni/lib/info-c.cpp new file mode 100644 index 0000000..3c05e79 --- /dev/null +++ b/jni/lib/info-c.cpp @@ -0,0 +1,112 @@ +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "info.hpp" + +namespace acommon { + +class Config; +struct DictInfo; +class DictInfoEnumeration; +class DictInfoList; +struct ModuleInfo; +class ModuleInfoEnumeration; +class ModuleInfoList; + +extern "C" ModuleInfoList * get_aspell_module_info_list(Config * config) +{ + return const_cast<ModuleInfoList *>(get_module_info_list(config)); +} + +extern "C" int aspell_module_info_list_empty(const ModuleInfoList * ths) +{ + return ths->empty(); +} + +extern "C" unsigned int aspell_module_info_list_size(const ModuleInfoList * ths) +{ + return ths->size(); +} + +extern "C" ModuleInfoEnumeration * aspell_module_info_list_elements(const ModuleInfoList * ths) +{ + return ths->elements(); +} + +extern "C" DictInfoList * get_aspell_dict_info_list(Config * config) +{ + return const_cast<DictInfoList *>(get_dict_info_list(config)); +} + +extern "C" int aspell_dict_info_list_empty(const DictInfoList * ths) +{ + return ths->empty(); +} + +extern "C" unsigned int aspell_dict_info_list_size(const DictInfoList * ths) +{ + return ths->size(); +} + +extern "C" DictInfoEnumeration * aspell_dict_info_list_elements(const DictInfoList * ths) +{ + return ths->elements(); +} + +extern "C" int aspell_module_info_enumeration_at_end(const ModuleInfoEnumeration * ths) +{ + return ths->at_end(); +} + +extern "C" const ModuleInfo * aspell_module_info_enumeration_next(ModuleInfoEnumeration * ths) +{ + return ths->next(); +} + +extern "C" void delete_aspell_module_info_enumeration(ModuleInfoEnumeration * ths) +{ + delete ths; +} + +extern "C" ModuleInfoEnumeration * aspell_module_info_enumeration_clone(const ModuleInfoEnumeration * ths) +{ + return ths->clone(); +} + +extern "C" void aspell_module_info_enumeration_assign(ModuleInfoEnumeration * ths, const ModuleInfoEnumeration * other) +{ + ths->assign(other); +} + +extern "C" int aspell_dict_info_enumeration_at_end(const DictInfoEnumeration * ths) +{ + return ths->at_end(); +} + +extern "C" const DictInfo * aspell_dict_info_enumeration_next(DictInfoEnumeration * ths) +{ + return ths->next(); +} + +extern "C" void delete_aspell_dict_info_enumeration(DictInfoEnumeration * ths) +{ + delete ths; +} + +extern "C" DictInfoEnumeration * aspell_dict_info_enumeration_clone(const DictInfoEnumeration * ths) +{ + return ths->clone(); +} + +extern "C" void aspell_dict_info_enumeration_assign(DictInfoEnumeration * ths, const DictInfoEnumeration * other) +{ + ths->assign(other); +} + + + +} + diff --git a/jni/lib/info-c.lo b/jni/lib/info-c.lo new file mode 100644 index 0000000..f637d72 --- /dev/null +++ b/jni/lib/info-c.lo @@ -0,0 +1,12 @@ +# lib/info-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/info-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/mutable_container-c.cpp b/jni/lib/mutable_container-c.cpp new file mode 100644 index 0000000..5d7654b --- /dev/null +++ b/jni/lib/mutable_container-c.cpp @@ -0,0 +1,39 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "mutable_container.hpp" +#include "posib_err.hpp" + +namespace acommon { + +class MutableContainer; + +extern "C" int aspell_mutable_container_add(MutableContainer * ths, const char * to_add) +{ + return ths->add(to_add); +} + +extern "C" int aspell_mutable_container_remove(MutableContainer * ths, const char * to_rem) +{ + return ths->remove(to_rem); +} + +extern "C" void aspell_mutable_container_clear(MutableContainer * ths) +{ + ths->clear(); +} + +extern "C" MutableContainer * aspell_mutable_container_to_mutable_container(MutableContainer * ths) +{ + return ths; +} + + + +} + diff --git a/jni/lib/mutable_container-c.lo b/jni/lib/mutable_container-c.lo new file mode 100644 index 0000000..3e28349 --- /dev/null +++ b/jni/lib/mutable_container-c.lo @@ -0,0 +1,12 @@ +# lib/mutable_container-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/mutable_container-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/new_checker.cpp b/jni/lib/new_checker.cpp new file mode 100644 index 0000000..fe8509d --- /dev/null +++ b/jni/lib/new_checker.cpp @@ -0,0 +1,26 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +#include "speller.hpp" +#include "document_checker.hpp" +#include "stack_ptr.hpp" +#include "convert.hpp" +#include "tokenizer.hpp" + +namespace acommon { + + PosibErr<DocumentChecker *> + new_document_checker(Speller * speller) + { + StackPtr<DocumentChecker> checker(new DocumentChecker()); + Tokenizer * tokenizer = new_tokenizer(speller); + StackPtr<Filter> filter(new Filter); + setup_filter(*filter, speller->config(), true, true, false); + RET_ON_ERR(checker->setup(tokenizer, speller, filter.release())); + return checker.release(); + } + +} diff --git a/jni/lib/new_checker.lo b/jni/lib/new_checker.lo new file mode 100644 index 0000000..37a41f5 --- /dev/null +++ b/jni/lib/new_checker.lo @@ -0,0 +1,12 @@ +# lib/new_checker.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/new_checker.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/new_config.cpp b/jni/lib/new_config.cpp new file mode 100644 index 0000000..6bcc426 --- /dev/null +++ b/jni/lib/new_config.cpp @@ -0,0 +1,24 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +#include <string.h> + +#include "config.hpp" +#include "errors.hpp" +#include "filter.hpp" + +namespace acommon { + + extern void setup_static_filters(Config * config); + + Config * new_config() + { + Config * config = new_basic_config(); + setup_static_filters(config); + return config; + } + +} diff --git a/jni/lib/new_config.lo b/jni/lib/new_config.lo new file mode 100644 index 0000000..d5b0d0b --- /dev/null +++ b/jni/lib/new_config.lo @@ -0,0 +1,12 @@ +# lib/new_config.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/new_config.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/new_filter.cpp b/jni/lib/new_filter.cpp new file mode 100644 index 0000000..56a911b --- /dev/null +++ b/jni/lib/new_filter.cpp @@ -0,0 +1,544 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Kevin Atkinson and Christoph Hintermller +// under the GNU LGPL license version 2.0 or 2.1. You should have +// received a copy of the LGPL license along with this library if you +// did not you can find it at http://www.gnu.org/. +// +// Expansion for loading filter libraries and collections upon startup +// was added by Christoph Hintermller + +#include "settings.h" + +#include "cache-t.hpp" +#include "asc_ctype.hpp" +#include "config.hpp" +#include "enumeration.hpp" +#include "errors.hpp" +#include "filter.hpp" +#include "filter_entry.hpp" +#include "fstream.hpp" +#include "getdata.hpp" +#include "indiv_filter.hpp" +#include "iostream.hpp" +#include "itemize.hpp" +#include "key_info.hpp" +#include "parm_string.hpp" +#include "posib_err.hpp" +#include "stack_ptr.hpp" +#include "string_enumeration.hpp" +#include "string_list.hpp" +#include "string_map.hpp" +#include "strtonum.hpp" +#include "file_util.hpp" + +#include <stdio.h> + +#ifdef HAVE_LIBDL +# include <dlfcn.h> +#endif + +namespace acommon +{ +/* XXX (padeler) Modifications to remove static filters from build XXX */ +//#include "static_filters.src.cpp" + static FilterEntry standard_filters[] = {}; + + const unsigned int standard_filters_size = sizeof(standard_filters)/sizeof(FilterEntry); +/* XXX ********************************************************** XXX */ + ////////////////////////////////////////////////////////////////////////// + // + // setup static filters + // + + PosibErr<const ConfigModule *> get_dynamic_filter(Config * config, ParmStr value); + extern void activate_filter_modes(Config *config); + + void setup_static_filters(Config * config) + { + // XXX (padeler) config->set_filter_modules(filter_modules_begin, filter_modules_end); + activate_filter_modes(config); +#ifdef HAVE_LIBDL + config->load_filter_hook = get_dynamic_filter; +#endif + } + + ////////////////////////////////////////////////////////////////////////// + // + // + // + +#ifdef HAVE_LIBDL + + struct ConfigFilterModule : public Cacheable { + String name; + String file; // path of shared object or dll + String desc; // description of module + Vector<KeyInfo> options; + typedef Config CacheConfig; + typedef String CacheKey; + static PosibErr<ConfigFilterModule *> get_new(const String & key, const Config *); + bool cache_key_eq(const String & okey) const { + return name == okey; + } + ConfigFilterModule() : in_option(0) {} + ~ConfigFilterModule(); + bool in_option; + KeyInfo * new_option() { + options.push_back(KeyInfo()); + in_option = true; + return &options.back();} + PosibErr<void> end_option(); + }; + + static GlobalCache<ConfigFilterModule> filter_module_cache("filters"); + + ConfigFilterModule::~ConfigFilterModule() + { + for (Vector<KeyInfo>::iterator i = options.begin(); + i != options.end(); + ++i) + { + free(const_cast<char *>(i->name)); + free(const_cast<char *>(i->def)); + free(const_cast<char *>(i->desc)); + } + } + +#endif + + class IndividualFilter; + + // + // actual code + // + + FilterEntry * get_standard_filter(ParmStr); + + ////////////////////////////////////////////////////////////////////////// + // + // setup filter + // + + PosibErr<void> setup_filter(Filter & filter, + Config * config, + bool use_decoder, bool use_filter, bool use_encoder) + { + StringList sl; + config->retrieve_list("filter", &sl); + StringListEnumeration els = sl.elements_obj(); + const char * filter_name; + String fun; + + StackPtr<IndividualFilter> ifilter; + + filter.clear(); + + while ((filter_name = els.next()) != 0) { + //fprintf(stderr, "Loading %s ... \n", filter_name); + FilterEntry * f = get_standard_filter(filter_name); + // In case libdl is not available a filter is only available if made + // one of the standard filters. This is done by statically linking + // the filter sources. + // On systems providing libdl or in case libtool mimics libdl + // The following code parts assure that all filters needed and requested + // by user are loaded properly or be reported to be missing. + // + FilterHandle decoder_handle, filter_handle, encoder_handle; +#ifdef HAVE_LIBDL + FilterEntry dynamic_filter; + if (!f) { + + RET_ON_ERR_SET(get_dynamic_filter(config, filter_name), + const ConfigModule *, module); + + if (!(decoder_handle = dlopen(module->file,RTLD_NOW)) || + !(encoder_handle = dlopen(module->file,RTLD_NOW)) || + !(filter_handle = dlopen(module->file,RTLD_NOW))) + return make_err(cant_dlopen_file,dlerror()).with_file(filter_name); + + fun = "new_aspell_"; + fun += filter_name; + fun += "_decoder"; + dynamic_filter.decoder = (FilterFun *)dlsym(decoder_handle.get(), fun.str()); + + fun = "new_aspell_"; + fun += filter_name; + fun += "_encoder"; + dynamic_filter.encoder = (FilterFun *)dlsym(encoder_handle.get(), fun.str()); + + fun = "new_aspell_"; + fun += filter_name; + fun += "_filter"; + dynamic_filter.filter = (FilterFun *)dlsym(filter_handle.get(), fun.str()); + + if (!dynamic_filter.decoder && + !dynamic_filter.encoder && + !dynamic_filter.filter) + return make_err(empty_filter,filter_name); + dynamic_filter.name = filter_name; + f = &dynamic_filter; + } +#else + if (!f) + return make_err(no_such_filter, filter_name); +#endif + if (use_decoder && f->decoder && (ifilter = f->decoder())) { + RET_ON_ERR_SET(ifilter->setup(config), bool, keep); + ifilter->handle = decoder_handle.release(); + if (!keep) { + ifilter.del(); + } else { + filter.add_filter(ifilter.release()); + } + } + if (use_filter && f->filter && (ifilter = f->filter())) { + RET_ON_ERR_SET(ifilter->setup(config), bool, keep); + ifilter->handle = filter_handle.release(); + if (!keep) { + ifilter.del(); + } else { + filter.add_filter(ifilter.release()); + } + } + if (use_encoder && f->encoder && (ifilter = f->encoder())) { + RET_ON_ERR_SET(ifilter->setup(config), bool, keep); + ifilter->handle = encoder_handle.release(); + if (!keep) { + ifilter.del(); + } else { + filter.add_filter(ifilter.release()); + } + } + } + return no_err; + } + + ////////////////////////////////////////////////////////////////////////// + // + // get filter + // + + FilterEntry * get_standard_filter(ParmStr filter_name) { + unsigned int i = 0; + while (i != standard_filters_size) { + if (standard_filters[i].name == filter_name) { + return (FilterEntry *) standard_filters + i; + } + ++i; + } + return 0; + } + +#ifdef HAVE_LIBDL + + PosibErr<const ConfigModule *> get_dynamic_filter(Config * config, ParmStr filter_name) + { + for (const ConfigModule * cur = config->filter_modules.pbegin(); + cur != config->filter_modules.pend(); + ++cur) + { + if (strcmp(cur->name,filter_name) == 0) return cur; + } + + RET_ON_ERR_SET(get_cache_data(&filter_module_cache, config, filter_name), + ConfigFilterModule *, module); + + ConfigModule m = { + module->name.str(), module->file.str(), module->desc.str(), + module->options.pbegin(), module->options.pend() + }; + + config->filter_modules_ptrs.push_back(module); + config->filter_modules.push_back(m); + + return &config->filter_modules.back(); + } + + PosibErr<ConfigFilterModule *> ConfigFilterModule::get_new(const String & filter_name, + const Config * config) + { + StackPtr<ConfigFilterModule> module(new ConfigFilterModule); + module->name = filter_name; + KeyInfo * cur_opt = NULL; + + String option_file = filter_name; + option_file += "-filter.info"; + if (!find_file(config, "filter-path", option_file)) + return make_err(no_such_filter, filter_name); + + FStream options; + RET_ON_ERR(options.open(option_file,"r")); + + String buf; DataPair d; + while (getdata_pair(options,d,buf)) + { + to_lower(d.key); + + // + // key == aspell + // + if (d.key == "aspell") + { + if ( d.value == NULL || *d.value == '\0' ) + return make_err(confusing_version).with_file(option_file,d.line_num); +#ifdef FILTER_VERSION_CONTROL + PosibErr<void> peb = check_version(d.value.str); + if (peb.has_err()) return peb.with_file(option_file,d.line_num); +#endif + continue; + } + + // + // key == option + // + if (d.key == "option" ) { + + RET_ON_ERR(module->end_option()); + + to_lower(d.value.str); + + cur_opt = module->new_option(); + + char * s = (char *)malloc(2 + filter_name.size() + 1 + d.value.size + 1); + cur_opt->name = s; + memcpy(s, "f-", 2); + s+= 2; + memcpy(s, filter_name.str(), filter_name.size()); + s += filter_name.size(); + *s++ = '-'; + memcpy(s, d.value.str, d.value.size); + s += d.value.size; + *s = '\0'; + for (Vector<KeyInfo>::iterator cur = module->options.begin(); + cur != module->options.end() - 1; // avoid checking the one just inserted + ++cur) { + if (strcmp(cur_opt->name,cur->name) == 0) + return make_err(identical_option).with_file(option_file,d.line_num); + } + + continue; + } + + // + // key == static + // + if (d.key == "static") { + RET_ON_ERR(module->end_option()); + continue; + } + + // + // key == description + // + if ((d.key == "desc") || + (d.key == "description")) { + + unescape(d.value); + + // + // filter description + // + if (!module->in_option) { + module->desc = d.value; + } + // + //option description + // + else { + //avoid memory leak; + if (cur_opt->desc) free((char *)cur_opt->desc); + cur_opt->desc = strdup(d.value.str); + } + continue; + } + + // + // key == lib-file + // + if (d.key == "lib-file") + { + module->file = d.value; + continue; + } + + // + // !active_option + // + if (!module->in_option) { + return make_err(options_only).with_file(option_file,d.line_num); + } + + // + // key == type + // + if (d.key == "type") { + to_lower(d.value); // This is safe since normally option_value is used + if (d.value == "list") + cur_opt->type = KeyInfoList; + else if (d.value == "int" || d.value == "integer") + cur_opt->type = KeyInfoInt; + else if (d.value == "string") + cur_opt->type = KeyInfoString; + //FIXME why not force user to ommit type specifier or explicitly say bool ??? + else + cur_opt->type = KeyInfoBool; + continue; + } + + // + // key == default + // + if (d.key == "def" || d.key == "default") { + + if (cur_opt->type == KeyInfoList) { + + int new_len = 0; + int orig_len = 0; + if (cur_opt->def) { + orig_len = strlen(cur_opt->def); + new_len += orig_len + 1; + } + for (const char * s = d.value.str; *s; ++s) { + if (*s == ':') ++new_len; + ++new_len; + } + new_len += 1; + char * x = (char *)realloc((char *)cur_opt->def, new_len); + cur_opt->def = x; + if (orig_len > 0) { + x += orig_len; + *x++ = ':'; + } + for (const char * s = d.value.str; *s; ++s) { + if (*s == ':') *x++ = ':'; + *x++ = *s; + } + *x = '\0'; + + } else { + + // FIXME + //may try some syntax checking + //if ( cur_opt->type == KeyInfoBool ) { + // check for valid bool values true false 0 1 on off ... + // and issue error if wrong or assume false ?? + //} + //if ( cur_opt->type == KeyInfoInt ) { + // check for valid integer or double and issue error if not + //} + unescape(d.value); + cur_opt->def = strdup(d.value.str); + } + continue; + } + + // + // key == flags + // + if (d.key == "flags") { + if (d.value == "utf-8" || d.value == "UTF-8") + cur_opt->flags = KEYINFO_UTF8; + continue; + } + + // + // key == endoption + // + if (d.key=="endoption") { + RET_ON_ERR(module->end_option()); + continue; + } + + // + // error + // + return make_err(invalid_option_modifier).with_file(option_file,d.line_num); + + } // end while getdata_pair_c + RET_ON_ERR(module->end_option()); + const char * slash = strrchr(option_file.str(), '/'); + assert(slash); + if (module->file.empty()) { + module->file.assign(option_file.str(), slash + 1 - option_file.str()); + //module->file += "lib"; + module->file += filter_name; + module->file += "-filter.so"; + } else { + if (module->file[0] != '/') + module->file.insert(0, option_file.str(), slash + 1 - option_file.str()); + module->file += ".so"; + } + + return module.release(); + } + + PosibErr<void> ConfigFilterModule::end_option() + { + if (in_option) + { + // FIXME: Check to make sure there is a name and desc. + KeyInfo * cur_opt = &options.back(); + if (!cur_opt->def) cur_opt->def = strdup(""); + } + in_option = false; + return no_err; + } + +#endif + + void load_all_filters(Config * config) { +#ifdef HAVE_LIBDL + StringList filter_path; + String toload; + + config->retrieve_list("filter-path", &filter_path); + PathBrowser els(filter_path, "-filter.info"); + + const char * file; + while ((file = els.next()) != NULL) { + + const char * name = strrchr(file, '/'); + if (!name) name = file; + else name++; + unsigned len = strlen(name) - 12; + + toload.assign(name, len); + + get_dynamic_filter(config, toload); + } +#endif + } + + + class FiltersEnumeration : public StringPairEnumeration + { + public: + typedef Vector<ConfigModule>::const_iterator Itr; + private: + Itr it; + Itr end; + public: + FiltersEnumeration(Itr i, Itr e) : it(i), end(e) {} + bool at_end() const {return it == end;} + StringPair next() + { + if (it == end) return StringPair(); + StringPair res = StringPair(it->name, it->desc); + ++it; + return res; + } + StringPairEnumeration * clone() const {return new FiltersEnumeration(*this);} + void assign(const StringPairEnumeration * other0) + { + const FiltersEnumeration * other = (const FiltersEnumeration *)other0; + *this = *other; + } + }; + + PosibErr<StringPairEnumeration *> available_filters(Config * config) + { + return new FiltersEnumeration(config->filter_modules.begin(), + config->filter_modules.end()); + } + +} diff --git a/jni/lib/new_filter.lo b/jni/lib/new_filter.lo new file mode 100644 index 0000000..42520fc --- /dev/null +++ b/jni/lib/new_filter.lo @@ -0,0 +1,12 @@ +# lib/new_filter.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/new_filter.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/new_fmode.cpp b/jni/lib/new_fmode.cpp new file mode 100644 index 0000000..0b5630b --- /dev/null +++ b/jni/lib/new_fmode.cpp @@ -0,0 +1,783 @@ +// This file is part of The New Aspell +// Copyright (C) 2004 by Christoph Hintermller (JEH) under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +#include "settings.h" + +#ifdef USE_POSIX_REGEX +# include <sys/types.h> +# include <regex.h> +#endif + +#include "stack_ptr.hpp" +#include "cache-t.hpp" +#include "string.hpp" +#include "vector.hpp" +#include "config.hpp" +#include "errors.hpp" +#include "filter.hpp" +#include "string_enumeration.hpp" +#include "string_list.hpp" +#include "posib_err.hpp" +#include "file_util.hpp" +#include "fstream.hpp" +#include "getdata.hpp" +#include "strtonum.hpp" +#include "asc_ctype.hpp" +#include "iostream.hpp" + +#include "gettext.h" + +namespace acommon { + + class FilterMode { + public: + class MagicString { + public: + MagicString(const String & mode) : mode_(mode), fileExtensions() {} + MagicString(const String & magic, const String & mode) + : magic_(magic), mode_(mode) {} + bool matchFile(FILE * in, const String & ext); + static PosibErr<bool> testMagic(FILE * seekIn, String & magic, const String & mode); + void addExtension(const String & ext) { fileExtensions.push_back(ext); } + bool hasExtension(const String & ext); + void remExtension(const String & ext); + MagicString & operator += (const String & ext) {addExtension(ext);return *this;} + MagicString & operator -= (const String & ext) {remExtension(ext);return *this;} + MagicString & operator = (const String & ext) { + fileExtensions.clear(); + addExtension(ext); + return *this; + } + const String & magic() const { return magic_; } + const String & magicMode() const { return mode_; } + ~MagicString() {} + private: + String magic_; + String mode_; + Vector<String> fileExtensions; + }; + + FilterMode(const String & name); + PosibErr<bool> addModeExtension(const String & ext, String toMagic); + PosibErr<bool> remModeExtension(const String & ext, String toMagic); + bool lockFileToMode(const String & fileName,FILE * in = NULL); + const String & modeName() const; + void setDescription(const String & desc) {desc_ = desc;} + const String & getDescription() const {return desc_;} + PosibErr<void> expand(Config * config); + PosibErr<void> build(FStream &, int line = 1, + const char * fname = "mode file"); + + ~FilterMode(); + private: + //map extensions to magic keys + String name_; + String desc_; + String file_; + Vector<MagicString> magicKeys; + struct KeyValue { + String key; + String value; + KeyValue() {} + KeyValue(ParmStr k, ParmStr v) : key(k), value(v) {} + }; + Vector<KeyValue> expansion; + }; + + class FilterModeList : public Cacheable, public Vector<FilterMode> + { + public: + typedef Config CacheConfig; + typedef String CacheKey; + String key; + static PosibErr<FilterModeList *> get_new(const String & key, const Config *); + bool cache_key_eq(const String & okey) const { + return key == okey; + } + }; + + class ModeNotifierImpl : public Notifier + { + private: + ModeNotifierImpl(); + ModeNotifierImpl(const ModeNotifierImpl &); + ModeNotifierImpl & operator= (const ModeNotifierImpl & b); + CachePtr<FilterModeList> filter_modes_; + public: + Config * config; + PosibErr<FilterModeList *> get_filter_modes(); + + ModeNotifierImpl(Config * c) : config(c) + { + c->filter_mode_notifier = this; + } + ModeNotifierImpl(const ModeNotifierImpl & other, Config * c) + : filter_modes_(other.filter_modes_), config(c) + { + c->filter_mode_notifier = this; + } + + ModeNotifierImpl * clone(Config * c) const {return new ModeNotifierImpl(*this, c);} + + PosibErr<void> item_updated(const KeyInfo * ki, ParmStr); + PosibErr<void> list_updated(const KeyInfo * ki); + + ~ModeNotifierImpl() {} + }; + + FilterMode::FilterMode(const String & name) + : name_(name) {} + + PosibErr<bool> FilterMode::addModeExtension(const String & ext, String toMagic) { + + bool extOnly = false; + + if ( ( toMagic == "" ) + || ( toMagic == "<noregex>" ) + || ( toMagic == "<nomagic>" ) + || ( toMagic == "<empty>" ) ) { + extOnly = true; + } + else { + + RET_ON_ERR(FilterMode::MagicString::testMagic(NULL,toMagic,name_)); + + } + + Vector<MagicString>::iterator it; + + for ( it = magicKeys.begin() ; it != magicKeys.end() ; it++ ) { + if ( ( extOnly + && ( it->magic() == "" ) ) + || ( it->magic() == toMagic ) ) { + *it += ext; + return true; + } + } + if ( it != magicKeys.end() ) { + return false; + } + if ( extOnly ) { + magicKeys.push_back(MagicString(name_)); + } + else { + magicKeys.push_back(MagicString(toMagic,name_)); + } + for ( it = magicKeys.begin() ; it != magicKeys.end() ; it++ ) { + if ( ( extOnly + && ( it->magic() == "" ) ) + || ( it->magic() == toMagic ) ) { + *it += ext; + return true; + } + } + return make_err(mode_extend_expand,name_.str()); + } + + PosibErr<bool> FilterMode::remModeExtension(const String & ext, String toMagic) { + + bool extOnly = false; + + if ( ( toMagic == "" ) + || ( toMagic == "<nomagic>" ) + || ( toMagic == "<empty>" ) ) { + extOnly = true; + } + else { + + PosibErr<bool> pe = FilterMode::MagicString::testMagic(NULL,toMagic,name_); + + if ( pe.has_err() ) { + return PosibErrBase(pe); + } + } + + for ( Vector<MagicString>::iterator it = magicKeys.begin() ; + it != magicKeys.end() ; it++ ) { + if ( ( extOnly + && ( it->magic() == "" ) ) + || ( it->magic() == toMagic ) ) { + *it -= ext; + return true; + } + } + return false; + } + + bool FilterMode::lockFileToMode(const String & fileName,FILE * in) { + + Vector<unsigned int> extStart; + int first_point = fileName.size(); + + while ( first_point > 0 ) { + while ( ( --first_point >= 0 ) + && ( fileName[first_point] != '.' ) ) { + } + if ( ( first_point >= 0 ) + && ( fileName[first_point] == '.' ) ) { + extStart.push_back(first_point + 1); + } + } + if ( extStart.size() < 1 ) { + return false; + } + + bool closeFile = false; + + if ( in == NULL ) { + in = fopen(fileName.str(),"rb"); + closeFile= true; + } + for ( Vector<unsigned int>::iterator extSIt = extStart.begin() ; + extSIt != extStart.end() ; extSIt ++ ) { + + String ext(fileName); + + ext.erase(0,*extSIt); + for ( Vector<MagicString>::iterator it = magicKeys.begin() ; + it != magicKeys.end() ; it++ ) { + PosibErr<bool> magicMatch = it->matchFile(in,ext); + if ( magicMatch + || magicMatch.has_err() ) { + if ( closeFile ) { + fclose ( in ); + } + if ( magicMatch.has_err() ) { + magicMatch.ignore_err(); + return false; + } + return true; + } + } + } + if ( closeFile ) { + fclose(in); + } + return false; + } + + const String & FilterMode::modeName() const { + return name_; + } + + FilterMode::~FilterMode() { + } + + bool FilterMode::MagicString::hasExtension(const String & ext) { + for ( Vector<String>::iterator it = fileExtensions.begin() ; + it != fileExtensions.end() ; it++ ) { + if ( *it == ext ) { + return true; + } + } + return false; + } + + void FilterMode::MagicString::remExtension(const String & ext) { + Vector<String>::iterator it = fileExtensions.begin(); + while (it != fileExtensions.end()) { + if (*it == ext) { + it = fileExtensions.erase(it); + } else { + it++; + } + } + } + + + bool FilterMode::MagicString::matchFile(FILE * in,const String & ext) { + + Vector<String>::iterator extIt; + + for ( extIt = fileExtensions.begin() ; + extIt != fileExtensions.end() ; extIt ++ ) { + if ( *extIt == ext ) { + break; + } + } + if ( extIt == fileExtensions.end() ) { + return false; + } + + PosibErr<bool> pe = testMagic(in,magic_,mode_); + + if ( pe.has_err() ) { + pe.ignore_err(); + return false; + } + return true; + } + + + PosibErr<bool> FilterMode::MagicString::testMagic(FILE * seekIn,String & magic, const String & mode) { + +#ifdef USE_POSIX_REGEX + + if ( magic.size() == 0 ) { + return true; + } + + unsigned int magicFilePosition = 0; + + while ( ( magicFilePosition < magic.size() ) + && ( magic[magicFilePosition] != ':' ) ) { + magicFilePosition++; + } + + String number(magic); + + number.erase(magicFilePosition,magic.size() - magicFilePosition); + + const char * num = number.str(); + const char * numEnd = num + number.size(); + const char * endHere = numEnd; + long position = 0; + + if ( ( number.size() == 0 ) + || ( (position = strtoi_c(num,&numEnd)) < 0 ) + || ( numEnd != endHere ) ) { + return make_err(file_magic_pos,"",magic.str()); + } + if ( ( magicFilePosition >= magic.size() ) + || ( ( seekIn != NULL ) + && ( fseek(seekIn,position,SEEK_SET) < 0 ) ) ) { + if ( seekIn != NULL ) { + rewind(seekIn); + } + return false; + } + + //increment magicFilePosition to skip the `:' + unsigned int seekRangePos = ++ magicFilePosition; + + while ( ( magicFilePosition < magic.size() ) + && ( magic[magicFilePosition] != ':' ) ) { + magicFilePosition++; + } + + String magicRegExp(magic); + + magicRegExp.erase(0,magicFilePosition + 1); + if ( magicRegExp.size() == 0 ) { + if ( seekIn != NULL ) { + rewind(seekIn); + } + return make_err(missing_magic,mode.str(),magic.str()); //no regular expression given + } + + number = magic; + number.erase(magicFilePosition,magic.size() - magicFilePosition); + number.erase(0,seekRangePos);//already incremented by one see above + num = (char*)number.str(); + endHere = numEnd = num + number.size(); + + if ( ( number.size() == 0 ) + || ( (position = strtoi_c(num,&numEnd)) < 0 ) + || ( numEnd != endHere ) ) { + if ( seekIn != NULL ) { + rewind(seekIn); + } + return make_err(file_magic_range,mode.str(),magic.str());//no magic range given + } + + regex_t seekMagic; + int regsucess = 0; + + if ( (regsucess = regcomp(&seekMagic,magicRegExp.str(), + REG_NEWLINE|REG_NOSUB|REG_EXTENDED)) ){ + if ( seekIn != NULL ) { + rewind(seekIn); + } + + char regError[256]; + regerror(regsucess,&seekMagic,®Error[0],256); + return make_err(bad_magic,mode.str(),magic.str(),regError); + } + if ( seekIn == NULL ) { + regfree(&seekMagic); + return true; + } + + char * buffer = new char[(position + 1)]; + + if ( buffer == NULL ) { + regfree(&seekMagic); + rewind(seekIn); + return false; + } + memset(buffer,0,(position + 1)); + if ( (position = fread(buffer,1,position,seekIn)) == 0 ) { + rewind(seekIn); + regfree(&seekMagic); + delete[] buffer; + return false; + } + if ( regexec(&seekMagic,buffer,0,NULL,0) ) { + delete[] buffer; + regfree(&seekMagic); + rewind(seekIn); + return false; + } + delete[] buffer; + regfree(&seekMagic); + rewind(seekIn); + return true; + +#else + + return true; + +#endif + + } + + PosibErr<void> FilterMode::expand(Config * config) { + + config->replace("clear-filter",""); + for ( Vector<KeyValue>::iterator it = expansion.begin() ; + it != expansion.end() ; it++ ) + { + PosibErr<void> pe = config->replace(it->key, it->value); + if (pe.has_err()) return pe.with_file(file_); + } + return no_err; + } + + PosibErr<void> FilterMode::build(FStream & toParse, int line0, const char * fname) { + + String buf; + DataPair dp; + + file_ = fname; + + dp.line_num = line0; + + while ( getdata_pair(toParse, dp, buf) ) { + + to_lower(dp.key); + + if ( dp.key == "filter" ) { + + to_lower(dp.value); + expansion.push_back(KeyValue("add-filter", dp.value)); + + } else if ( dp.key == "option" ) { + + split(dp); + // FIXME: Add check for empty key + + expansion.push_back(KeyValue(dp.key, dp.value)); + + } else { + + return make_err(bad_mode_key,dp.key).with_file(fname,dp.line_num); + } + } + + return no_err; + } + + static GlobalCache<FilterModeList> filter_modes_cache("filter_modes"); + + PosibErr<void> set_mode_from_extension (Config * config, ParmString filename, FILE * in) + { + RET_ON_ERR_SET(static_cast<ModeNotifierImpl *>(config->filter_mode_notifier) + ->get_filter_modes(), FilterModeList *, fm); + + for ( FilterModeList::iterator it = fm->begin(); it != fm->end(); it++ ) + { + if ( it->lockFileToMode(filename,in) ) { + RET_ON_ERR(config->replace("mode", it->modeName().str())); + break; + } + } + return no_err; + } + + void activate_filter_modes(Config *config); + + PosibErr<FilterModeList *> ModeNotifierImpl::get_filter_modes() + { + if (!filter_modes_) { + //FIXME is filter-path proper for filter mode files ??? + // if filter-options-path better ??? + // do we need a filter-mode-path ??? + // should change to use genetic data-path once implemented + // and then search filter-path - KevinA + String filter_path; + StringList filter_path_lst; + config->retrieve_list("filter-path", &filter_path_lst); + combine_list(filter_path, filter_path_lst); + RET_ON_ERR(setup(filter_modes_, &filter_modes_cache, config, filter_path)); + } + return filter_modes_.get(); + } + + + PosibErr<void> ModeNotifierImpl::item_updated(const KeyInfo * ki, ParmStr value) + { + if ( strcmp(ki->name, "mode") == 0 ) { + RET_ON_ERR_SET(get_filter_modes(), FilterModeList *, filter_modes); + for ( Vector<FilterMode>::iterator it = filter_modes->begin() ; + it != filter_modes->end() ; it++ ) { + if ( it->modeName() == value ) + return it->expand(config); + } + return make_err(unknown_mode, value); + } + return no_err; + } + + PosibErr<void> ModeNotifierImpl::list_updated(const KeyInfo * ki) + { + if (strcmp(ki->name, "filter-path") == 0) { + filter_modes_.reset(0); + } + return no_err; + } + + PosibErr<FilterModeList *> FilterModeList::get_new(const String & key, + const Config *) + { + + StackPtr<FilterModeList> filter_modes(new FilterModeList); + filter_modes->key = key; + StringList mode_path; + separate_list(key, mode_path); + + PathBrowser els(mode_path, ".amf"); + + String possMode; + String possModeFile; + + const char * file; + while ((file = els.next()) != NULL) + { + possModeFile = file; + possMode.assign(possModeFile.str(), possModeFile.size() - 4); + + unsigned pathPos = 0; + unsigned pathPosEnd = 0; + + while ( ( (pathPosEnd = possMode.find('/',pathPos)) < possMode.size() ) + && ( pathPosEnd >= 0 ) ) { + pathPos = pathPosEnd + 1; + } + possMode.erase(0,pathPos); + to_lower(possMode.mstr()); + + Vector<FilterMode>::iterator fmIt = filter_modes->begin(); + + for ( fmIt = filter_modes->begin() ; + fmIt != filter_modes->end() ; fmIt++ ) { + if ( (*fmIt).modeName() == possMode ) { + break; + } + } + if ( fmIt != filter_modes->end() ) { + continue; + } + + FStream toParse; + + RET_ON_ERR(toParse.open(possModeFile.str(),"rb")); + + String buf; + DataPair dp; + + bool get_sucess = getdata_pair(toParse, dp, buf); + + to_lower(dp.key); + to_lower(dp.value); + if ( !get_sucess + || ( dp.key != "mode" ) + || ( dp.value != possMode.str() ) ) + return make_err(expect_mode_key,"mode").with_file(possModeFile, dp.line_num); + + get_sucess = getdata_pair(toParse, dp, buf); + to_lower(dp.key); + if ( !get_sucess + || ( dp.key != "aspell" ) + || ( dp.value == NULL ) + || ( *(dp.value) == '\0' ) ) + return make_err(mode_version_requirement).with_file(possModeFile, dp.line_num); + +#ifdef FILTER_VERSION_CONTROL + PosibErr<void> peb = check_version(dp.value.str); + if (peb.has_err()) return peb.with_file(possModeFile, dp.line_num); +#endif + + FilterMode collect(possMode); + + while ( getdata_pair(toParse,dp,buf) ) { + to_lower(dp.key); + if ( ( dp.key == "desc" ) + || ( dp.key == "description" ) ) + { + unescape(dp.value); + collect.setDescription(dp.value); + break; + } + if ( dp.key == "magic" ) { + + char * regbegin = dp.value; + + while ( regbegin + && ( *regbegin != '/' ) ) { + regbegin++; + } + if ( ( regbegin == NULL ) + || ( *regbegin == '\0' ) + || ( *(++regbegin) == '\0' ) ) + return make_err(missing_magic_expression).with_file(possModeFile, dp.line_num); + + char * regend = regbegin; + bool prevslash = false; + + while ( regend + && ( *regend != '\0' ) + && ( prevslash + || ( * regend != '/' ) ) ) { + if ( *regend == '\\' ) { + prevslash = !prevslash; + } + else { + prevslash = false; + } + regend ++ ; + } + if ( regend == regbegin ) + return make_err(missing_magic_expression).with_file(possModeFile, dp.line_num); + + char swap = *regend; + + *regend = '\0'; + + String magic(regbegin); + + *regend = swap; + + unsigned int extCount = 0; + + while ( *regend != '\0' ) { + regend ++; + extCount ++; + regbegin = regend; + while ( ( *regend != '/' ) + && ( *regend != '\0' ) ) { + regend++; + } + if ( regend == regbegin ) + { + char charCount[64]; + sprintf(&charCount[0],"%li",(long)(regbegin - (char *)dp.value)); + return make_err(empty_file_ext,charCount).with_file(possModeFile,dp.line_num); + } + + bool remove = false; + bool add = true; + + if ( *regbegin == '+' ) { + regbegin++; + } + else if ( *regbegin == '-' ) { + add = false; + remove = true; + regbegin++; + } + if ( regend == regbegin ) + { + char charCount[64]; + sprintf(&charCount[0],"%li",(long)(regbegin - (char *)dp.value)); + return make_err(empty_file_ext,charCount).with_file(possModeFile,dp.line_num); + } + swap = *regend; + *regend = '\0'; + + String ext(regbegin); + + *regend = swap; + + // partially unescape magic + + char * dest = magic.mstr(); + const char * src = magic.mstr(); + while (*src) { + if ((*src == '\\' && src[1] == '/') || src[1] == '#') + ++src; + *dest++ = *src++; + } + magic.resize(dest - magic.mstr()); + + PosibErr<bool> pe; + + if ( remove ) + pe = collect.remModeExtension(ext,magic); + else + pe = collect.addModeExtension(ext,magic); + + if ( pe.has_err() ) + return pe.with_file(possModeFile, dp.line_num); + } + + if (extCount > 0 ) continue; + + char charCount[64]; + sprintf(&charCount[0],"%lu",(unsigned long)strlen((char *)dp.value)); + return make_err(empty_file_ext,charCount).with_file(possModeFile,dp.line_num); + } + + return make_err(expect_mode_key,"ext[tension]/magic/desc[ription]/rel[ation]") + .with_file(possModeFile,dp.line_num); + + }//while getdata_pair + + RET_ON_ERR(collect.build(toParse,dp.line_num,possModeFile.str())); + + filter_modes->push_back(collect); + } + return filter_modes.release(); + } + + void activate_filter_modes(Config *config) + { + config->add_notifier(new ModeNotifierImpl(config)); + } + + class FilterModesEnumeration : public StringPairEnumeration + { + public: + typedef Vector<FilterMode>::const_iterator Itr; + private: + Itr it; + Itr end; + public: + FilterModesEnumeration(Itr i, Itr e) : it(i), end(e) {} + bool at_end() const {return it == end;} + StringPair next() + { + if (it == end) return StringPair(); + StringPair res = StringPair(it->modeName().str(), it->getDescription().str()); + ++it; + return res; + } + StringPairEnumeration * clone() const {return new FilterModesEnumeration(*this);} + void assign(const StringPairEnumeration * other0) + { + const FilterModesEnumeration * other = (const FilterModesEnumeration *)other0; + *this = *other; + } + }; + + PosibErr<StringPairEnumeration *> available_filter_modes(Config * config) + { + RET_ON_ERR_SET(static_cast<ModeNotifierImpl *>(config->filter_mode_notifier) + ->get_filter_modes(), FilterModeList *, fm); + return new FilterModesEnumeration(fm->begin(), fm->end()); + } + +} + diff --git a/jni/lib/new_fmode.lo b/jni/lib/new_fmode.lo new file mode 100644 index 0000000..415fc2f --- /dev/null +++ b/jni/lib/new_fmode.lo @@ -0,0 +1,12 @@ +# lib/new_fmode.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/new_fmode.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/speller-c.cpp b/jni/lib/speller-c.cpp new file mode 100644 index 0000000..2e8bdd8 --- /dev/null +++ b/jni/lib/speller-c.cpp @@ -0,0 +1,173 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "convert.hpp" +#include "error.hpp" +#include "mutable_string.hpp" +#include "posib_err.hpp" +#include "speller.hpp" +#include "word_list.hpp" + +namespace acommon { + +class CanHaveError; +class Config; +struct Error; +class Speller; +class WordList; + +extern "C" CanHaveError * new_aspell_speller(Config * config) +{ + PosibErr<Speller *> ret = new_speller(config); + if (ret.has_err()) { + return new CanHaveError(ret.release_err()); + } else { + return ret; + } +} + +extern "C" Speller * to_aspell_speller(CanHaveError * obj) +{ + return static_cast<Speller *>(obj); +} + +extern "C" void delete_aspell_speller(Speller * ths) +{ + delete ths; +} + +extern "C" unsigned int aspell_speller_error_number(const Speller * ths) +{ + return ths->err_ == 0 ? 0 : 1; +} + +extern "C" const char * aspell_speller_error_message(const Speller * ths) +{ + return ths->err_ ? ths->err_->mesg : ""; +} + +extern "C" const Error * aspell_speller_error(const Speller * ths) +{ + return ths->err_; +} + +extern "C" Config * aspell_speller_config(Speller * ths) +{ + return ths->config(); +} + +extern "C" int aspell_speller_check(Speller * ths, const char * word, int word_size) +{ + ths->temp_str_0.clear(); + ths->to_internal_->convert(word, word_size, ths->temp_str_0); + unsigned int s0 = ths->temp_str_0.size(); + PosibErr<bool> ret = ths->check(MutableString(ths->temp_str_0.mstr(), s0)); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return -1; + return ret.data; +} + +extern "C" int aspell_speller_add_to_personal(Speller * ths, const char * word, int word_size) +{ + ths->temp_str_0.clear(); + ths->to_internal_->convert(word, word_size, ths->temp_str_0); + unsigned int s0 = ths->temp_str_0.size(); + PosibErr<void> ret = ths->add_to_personal(MutableString(ths->temp_str_0.mstr(), s0)); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + return 1; +} + +extern "C" int aspell_speller_add_to_session(Speller * ths, const char * word, int word_size) +{ + ths->temp_str_0.clear(); + ths->to_internal_->convert(word, word_size, ths->temp_str_0); + unsigned int s0 = ths->temp_str_0.size(); + PosibErr<void> ret = ths->add_to_session(MutableString(ths->temp_str_0.mstr(), s0)); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + return 1; +} + +extern "C" const WordList * aspell_speller_personal_word_list(Speller * ths) +{ + PosibErr<const WordList *> ret = ths->personal_word_list(); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + if (ret.data) + const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_; + return ret.data; +} + +extern "C" const WordList * aspell_speller_session_word_list(Speller * ths) +{ + PosibErr<const WordList *> ret = ths->session_word_list(); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + if (ret.data) + const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_; + return ret.data; +} + +extern "C" const WordList * aspell_speller_main_word_list(Speller * ths) +{ + PosibErr<const WordList *> ret = ths->main_word_list(); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + if (ret.data) + const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_; + return ret.data; +} + +extern "C" int aspell_speller_save_all_word_lists(Speller * ths) +{ + PosibErr<void> ret = ths->save_all_word_lists(); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + return 1; +} + +extern "C" int aspell_speller_clear_session(Speller * ths) +{ + PosibErr<void> ret = ths->clear_session(); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + return 1; +} + +extern "C" const WordList * aspell_speller_suggest(Speller * ths, const char * word, int word_size) +{ + ths->temp_str_0.clear(); + ths->to_internal_->convert(word, word_size, ths->temp_str_0); + unsigned int s0 = ths->temp_str_0.size(); + PosibErr<const WordList *> ret = ths->suggest(MutableString(ths->temp_str_0.mstr(), s0)); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return 0; + if (ret.data) + const_cast<WordList *>(ret.data)->from_internal_ = ths->from_internal_; + return ret.data; +} + +extern "C" int aspell_speller_store_replacement(Speller * ths, const char * mis, int mis_size, const char * cor, int cor_size) +{ + ths->temp_str_0.clear(); + ths->to_internal_->convert(mis, mis_size, ths->temp_str_0); + unsigned int s0 = ths->temp_str_0.size(); + ths->temp_str_1.clear(); + ths->to_internal_->convert(cor, cor_size, ths->temp_str_1); + unsigned int s1 = ths->temp_str_1.size(); + PosibErr<bool> ret = ths->store_replacement(MutableString(ths->temp_str_0.mstr(), s0), MutableString(ths->temp_str_1.mstr(), s1)); + ths->err_.reset(ret.release_err()); + if (ths->err_ != 0) return -1; + return ret.data; +} + + + +} + diff --git a/jni/lib/speller-c.lo b/jni/lib/speller-c.lo new file mode 100644 index 0000000..9320aa2 --- /dev/null +++ b/jni/lib/speller-c.lo @@ -0,0 +1,12 @@ +# lib/speller-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/speller-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/string_enumeration-c.cpp b/jni/lib/string_enumeration-c.cpp new file mode 100644 index 0000000..0fa4ae0 --- /dev/null +++ b/jni/lib/string_enumeration-c.cpp @@ -0,0 +1,52 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "convert.hpp" +#include "string_enumeration.hpp" + +namespace acommon { + +class StringEnumeration; + +extern "C" void delete_aspell_string_enumeration(StringEnumeration * ths) +{ + delete ths; +} + +extern "C" StringEnumeration * aspell_string_enumeration_clone(const StringEnumeration * ths) +{ + return ths->clone(); +} + +extern "C" void aspell_string_enumeration_assign(StringEnumeration * ths, const StringEnumeration * other) +{ + ths->assign(other); +} + +extern "C" int aspell_string_enumeration_at_end(const StringEnumeration * ths) +{ + return ths->at_end(); +} + +extern "C" const char * aspell_string_enumeration_next(StringEnumeration * ths) +{ + const char * s = ths->next(); + if (s == 0 || ths->from_internal_ == 0) { + return s; + } else { + ths->temp_str.clear(); + ths->from_internal_->convert(s,-1,ths->temp_str); + ths->from_internal_->append_null(ths->temp_str); + return ths->temp_str.data(); + } +} + + + +} + diff --git a/jni/lib/string_enumeration-c.lo b/jni/lib/string_enumeration-c.lo new file mode 100644 index 0000000..44984fa --- /dev/null +++ b/jni/lib/string_enumeration-c.lo @@ -0,0 +1,12 @@ +# lib/string_enumeration-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/string_enumeration-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/string_list-c.cpp b/jni/lib/string_list-c.cpp new file mode 100644 index 0000000..8a939c8 --- /dev/null +++ b/jni/lib/string_list-c.cpp @@ -0,0 +1,76 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "posib_err.hpp" +#include "string_list.hpp" + +namespace acommon { + +class MutableContainer; +class StringEnumeration; +class StringList; + +extern "C" StringList * new_aspell_string_list() +{ + return new_string_list(); +} + +extern "C" int aspell_string_list_empty(const StringList * ths) +{ + return ths->empty(); +} + +extern "C" unsigned int aspell_string_list_size(const StringList * ths) +{ + return ths->size(); +} + +extern "C" StringEnumeration * aspell_string_list_elements(const StringList * ths) +{ + return ths->elements(); +} + +extern "C" int aspell_string_list_add(StringList * ths, const char * to_add) +{ + return ths->add(to_add); +} + +extern "C" int aspell_string_list_remove(StringList * ths, const char * to_rem) +{ + return ths->remove(to_rem); +} + +extern "C" void aspell_string_list_clear(StringList * ths) +{ + ths->clear(); +} + +extern "C" MutableContainer * aspell_string_list_to_mutable_container(StringList * ths) +{ + return ths; +} + +extern "C" void delete_aspell_string_list(StringList * ths) +{ + delete ths; +} + +extern "C" StringList * aspell_string_list_clone(const StringList * ths) +{ + return ths->clone(); +} + +extern "C" void aspell_string_list_assign(StringList * ths, const StringList * other) +{ + ths->assign(other); +} + + + +} + diff --git a/jni/lib/string_list-c.lo b/jni/lib/string_list-c.lo new file mode 100644 index 0000000..e0226b9 --- /dev/null +++ b/jni/lib/string_list-c.lo @@ -0,0 +1,12 @@ +# lib/string_list-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/string_list-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/string_map-c.cpp b/jni/lib/string_map-c.cpp new file mode 100644 index 0000000..f8eaca8 --- /dev/null +++ b/jni/lib/string_map-c.cpp @@ -0,0 +1,91 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "posib_err.hpp" +#include "string_map.hpp" + +namespace acommon { + +class MutableContainer; +class StringMap; +class StringPairEnumeration; + +extern "C" StringMap * new_aspell_string_map() +{ + return new_string_map(); +} + +extern "C" int aspell_string_map_add(StringMap * ths, const char * to_add) +{ + return ths->add(to_add); +} + +extern "C" int aspell_string_map_remove(StringMap * ths, const char * to_rem) +{ + return ths->remove(to_rem); +} + +extern "C" void aspell_string_map_clear(StringMap * ths) +{ + ths->clear(); +} + +extern "C" MutableContainer * aspell_string_map_to_mutable_container(StringMap * ths) +{ + return ths; +} + +extern "C" void delete_aspell_string_map(StringMap * ths) +{ + delete ths; +} + +extern "C" StringMap * aspell_string_map_clone(const StringMap * ths) +{ + return ths->clone(); +} + +extern "C" void aspell_string_map_assign(StringMap * ths, const StringMap * other) +{ + ths->assign(other); +} + +extern "C" int aspell_string_map_empty(const StringMap * ths) +{ + return ths->empty(); +} + +extern "C" unsigned int aspell_string_map_size(const StringMap * ths) +{ + return ths->size(); +} + +extern "C" StringPairEnumeration * aspell_string_map_elements(const StringMap * ths) +{ + return ths->elements(); +} + +extern "C" int aspell_string_map_insert(StringMap * ths, const char * key, const char * value) +{ + return ths->insert(key, value); +} + +extern "C" int aspell_string_map_replace(StringMap * ths, const char * key, const char * value) +{ + return ths->replace(key, value); +} + +extern "C" const char * aspell_string_map_lookup(const StringMap * ths, const char * key) +{ + return ths->lookup(key); +} + + + +} + diff --git a/jni/lib/string_map-c.lo b/jni/lib/string_map-c.lo new file mode 100644 index 0000000..2a42fde --- /dev/null +++ b/jni/lib/string_map-c.lo @@ -0,0 +1,12 @@ +# lib/string_map-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/string_map-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/string_pair_enumeration-c.cpp b/jni/lib/string_pair_enumeration-c.cpp new file mode 100644 index 0000000..e5f668d --- /dev/null +++ b/jni/lib/string_pair_enumeration-c.cpp @@ -0,0 +1,44 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "string_pair.hpp" +#include "string_pair_enumeration.hpp" + +namespace acommon { + +class StringPairEnumeration; + +extern "C" int aspell_string_pair_enumeration_at_end(const StringPairEnumeration * ths) +{ + return ths->at_end(); +} + +extern "C" StringPair aspell_string_pair_enumeration_next(StringPairEnumeration * ths) +{ + return ths->next(); +} + +extern "C" void delete_aspell_string_pair_enumeration(StringPairEnumeration * ths) +{ + delete ths; +} + +extern "C" StringPairEnumeration * aspell_string_pair_enumeration_clone(const StringPairEnumeration * ths) +{ + return ths->clone(); +} + +extern "C" void aspell_string_pair_enumeration_assign(StringPairEnumeration * ths, const StringPairEnumeration * other) +{ + ths->assign(other); +} + + + +} + diff --git a/jni/lib/string_pair_enumeration-c.lo b/jni/lib/string_pair_enumeration-c.lo new file mode 100644 index 0000000..b1fdc11 --- /dev/null +++ b/jni/lib/string_pair_enumeration-c.lo @@ -0,0 +1,12 @@ +# lib/string_pair_enumeration-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/string_pair_enumeration-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/lib/word_list-c.cpp b/jni/lib/word_list-c.cpp new file mode 100644 index 0000000..f03dbcd --- /dev/null +++ b/jni/lib/word_list-c.cpp @@ -0,0 +1,37 @@ +/* Automatically generated file. Do not edit directly. */ + +/* This file is part of The New Aspell + * Copyright (C) 2001-2002 by Kevin Atkinson under the GNU LGPL + * license version 2.0 or 2.1. You should have received a copy of the + * LGPL license along with this library if you did not you can find it + * at http://www.gnu.org/. */ + +#include "string_enumeration.hpp" +#include "word_list.hpp" + +namespace acommon { + +class StringEnumeration; +class WordList; + +extern "C" int aspell_word_list_empty(const WordList * ths) +{ + return ths->empty(); +} + +extern "C" unsigned int aspell_word_list_size(const WordList * ths) +{ + return ths->size(); +} + +extern "C" StringEnumeration * aspell_word_list_elements(const WordList * ths) +{ + StringEnumeration * els = ths->elements(); + els->from_internal_ = ths->from_internal_; + return els; +} + + + +} + diff --git a/jni/lib/word_list-c.lo b/jni/lib/word_list-c.lo new file mode 100644 index 0000000..3435719 --- /dev/null +++ b/jni/lib/word_list-c.lo @@ -0,0 +1,12 @@ +# lib/word_list-c.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/word_list-c.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/Makefile b/jni/modules/Makefile new file mode 100644 index 0000000..9141085 --- /dev/null +++ b/jni/modules/Makefile @@ -0,0 +1,4 @@ +top_srcdir = .. + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/Makefile.in b/jni/modules/Makefile.in new file mode 100644 index 0000000..60bc80d --- /dev/null +++ b/jni/modules/Makefile.in @@ -0,0 +1,4 @@ +top_srcdir = @top_srcdir@ + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/filter/.deps/.dirstamp b/jni/modules/filter/.deps/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/modules/filter/.deps/context.Plo b/jni/modules/filter/.deps/context.Plo new file mode 100644 index 0000000..bed1aef --- /dev/null +++ b/jni/modules/filter/.deps/context.Plo @@ -0,0 +1,302 @@ +modules/filter/context.lo: modules/filter/context.cpp gen/settings.h \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/config.hpp common/can_have_error.hpp \ + common/key_info.hpp common/posib_err.hpp common/string.hpp \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/filter_char.hpp \ + common/indiv_filter.hpp /usr/include/assert.h common/filter_char.hpp \ + common/iostream.hpp common/fstream.hpp /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/posib_err.hpp common/string.hpp \ + common/string_enumeration.hpp common/type_id.hpp common/char_vector.hpp \ + common/string_list.hpp common/string_enumeration.hpp \ + common/mutable_container.hpp /usr/include/c++/4.5/cstdio \ + common/vector.hpp + +gen/settings.h: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/filter_char.hpp: + +common/indiv_filter.hpp: + +/usr/include/assert.h: + +common/filter_char.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/posib_err.hpp: + +common/string.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/char_vector.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/mutable_container.hpp: + +/usr/include/c++/4.5/cstdio: + +common/vector.hpp: diff --git a/jni/modules/filter/.deps/email.Plo b/jni/modules/filter/.deps/email.Plo new file mode 100644 index 0000000..43572b6 --- /dev/null +++ b/jni/modules/filter/.deps/email.Plo @@ -0,0 +1,289 @@ +modules/filter/email.lo: modules/filter/email.cpp gen/settings.h \ + common/indiv_filter.hpp /usr/include/assert.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h common/string.hpp /usr/include/string.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/posib_err.hpp common/error.hpp \ + common/errors.hpp common/ndebug.hpp common/filter_char.hpp \ + common/convert.hpp common/char_vector.hpp common/filter_char_vector.hpp \ + common/vector.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/stack_ptr.hpp \ + common/filter.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/cache.hpp \ + common/config.hpp common/key_info.hpp common/mutable_container.hpp + +gen/settings.h: + +common/indiv_filter.hpp: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +common/string.hpp: + +/usr/include/string.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/filter_char.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char_vector.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +common/config.hpp: + +common/key_info.hpp: + +common/mutable_container.hpp: diff --git a/jni/modules/filter/.deps/nroff.Plo b/jni/modules/filter/.deps/nroff.Plo new file mode 100644 index 0000000..0a02b45 --- /dev/null +++ b/jni/modules/filter/.deps/nroff.Plo @@ -0,0 +1,303 @@ +modules/filter/nroff.lo: modules/filter/nroff.cpp /usr/include/stdio.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h gen/settings.h \ + common/asc_ctype.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/error.hpp common/key_info.hpp \ + common/posib_err.hpp common/string.hpp /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/indiv_filter.hpp \ + /usr/include/assert.h common/filter_char.hpp common/string_map.hpp \ + common/mutable_container.hpp common/string_pair.hpp common/hash.hpp \ + /usr/include/c++/4.5/functional /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h common/block_slist.hpp \ + common/objstack.hpp common/mutable_container.hpp common/clone_ptr-t.hpp \ + common/clone_ptr.hpp /usr/include/c++/4.5/typeinfo \ + common/filter_char_vector.hpp + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +gen/settings.h: + +common/asc_ctype.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/indiv_filter.hpp: + +/usr/include/assert.h: + +common/filter_char.hpp: + +common/string_map.hpp: + +common/mutable_container.hpp: + +common/string_pair.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/mutable_container.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +common/filter_char_vector.hpp: diff --git a/jni/modules/filter/.deps/sgml.Plo b/jni/modules/filter/.deps/sgml.Plo new file mode 100644 index 0000000..12146ab --- /dev/null +++ b/jni/modules/filter/.deps/sgml.Plo @@ -0,0 +1,303 @@ +modules/filter/sgml.lo: modules/filter/sgml.cpp /usr/include/stdio.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h gen/settings.h \ + common/asc_ctype.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/error.hpp common/key_info.hpp \ + common/posib_err.hpp common/string.hpp /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/indiv_filter.hpp \ + /usr/include/assert.h common/filter_char.hpp common/string_map.hpp \ + common/mutable_container.hpp common/string_pair.hpp common/hash.hpp \ + /usr/include/c++/4.5/functional /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h common/block_slist.hpp \ + common/objstack.hpp common/mutable_container.hpp common/clone_ptr-t.hpp \ + common/clone_ptr.hpp /usr/include/c++/4.5/typeinfo \ + common/filter_char_vector.hpp + +/usr/include/stdio.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +gen/settings.h: + +common/asc_ctype.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/indiv_filter.hpp: + +/usr/include/assert.h: + +common/filter_char.hpp: + +common/string_map.hpp: + +common/mutable_container.hpp: + +common/string_pair.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/mutable_container.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +common/filter_char_vector.hpp: diff --git a/jni/modules/filter/.deps/tex.Plo b/jni/modules/filter/.deps/tex.Plo new file mode 100644 index 0000000..285baee --- /dev/null +++ b/jni/modules/filter/.deps/tex.Plo @@ -0,0 +1,345 @@ +modules/filter/tex.lo: modules/filter/tex.cpp common/asc_ctype.hpp \ + common/config.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/string.hpp \ + common/indiv_filter.hpp /usr/include/assert.h common/filter_char.hpp \ + common/mutable_container.hpp common/string_map.hpp \ + common/mutable_container.hpp common/string_pair.hpp common/hash.hpp \ + /usr/include/c++/4.5/functional /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h gen/settings.h \ + common/block_slist.hpp common/objstack.hpp common/clone_ptr-t.hpp \ + common/clone_ptr.hpp /usr/include/c++/4.5/typeinfo common/vector.hpp \ + common/errors.hpp common/convert.hpp common/char_vector.hpp \ + common/filter_char_vector.hpp common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/cache.hpp \ + common/filter_char_vector.hpp common/string_list.hpp \ + common/string_enumeration.hpp common/type_id.hpp \ + /usr/include/c++/4.5/cstdio common/string_enumeration.hpp \ + common/gettext.h /usr/include/libintl.h + +common/asc_ctype.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/string.hpp: + +common/indiv_filter.hpp: + +/usr/include/assert.h: + +common/filter_char.hpp: + +common/mutable_container.hpp: + +common/string_map.hpp: + +common/mutable_container.hpp: + +common/string_pair.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +gen/settings.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +common/vector.hpp: + +common/errors.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +common/filter_char_vector.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +/usr/include/c++/4.5/cstdio: + +common/string_enumeration.hpp: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/modules/filter/.deps/texinfo.Plo b/jni/modules/filter/.deps/texinfo.Plo new file mode 100644 index 0000000..483ac5d --- /dev/null +++ b/jni/modules/filter/.deps/texinfo.Plo @@ -0,0 +1,280 @@ +modules/filter/texinfo.lo: modules/filter/texinfo.cpp \ + common/asc_ctype.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/error.hpp common/key_info.hpp \ + common/posib_err.hpp common/string.hpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/string.hpp \ + common/indiv_filter.hpp /usr/include/assert.h common/filter_char.hpp \ + common/string_map.hpp common/mutable_container.hpp \ + common/string_pair.hpp common/hash.hpp /usr/include/c++/4.5/functional \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h gen/settings.h \ + common/block_slist.hpp common/objstack.hpp common/vector.hpp + +common/asc_ctype.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/string.hpp: + +common/indiv_filter.hpp: + +/usr/include/assert.h: + +common/filter_char.hpp: + +common/string_map.hpp: + +common/mutable_container.hpp: + +common/string_pair.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +gen/settings.h: + +common/block_slist.hpp: + +common/objstack.hpp: + +common/vector.hpp: diff --git a/jni/modules/filter/.deps/url.Plo b/jni/modules/filter/.deps/url.Plo new file mode 100644 index 0000000..f2e35d3 --- /dev/null +++ b/jni/modules/filter/.deps/url.Plo @@ -0,0 +1,219 @@ +modules/filter/url.lo: modules/filter/url.cpp gen/settings.h \ + common/indiv_filter.hpp /usr/include/assert.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h common/string.hpp /usr/include/string.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/posib_err.hpp common/error.hpp \ + common/errors.hpp common/ndebug.hpp common/filter_char.hpp \ + common/key_info.hpp common/key_info.hpp + +gen/settings.h: + +common/indiv_filter.hpp: + +/usr/include/assert.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +common/string.hpp: + +/usr/include/string.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/filter_char.hpp: + +common/key_info.hpp: + +common/key_info.hpp: diff --git a/jni/modules/filter/.dirstamp b/jni/modules/filter/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/modules/filter/Makefile b/jni/modules/filter/Makefile new file mode 100644 index 0000000..aac96cc --- /dev/null +++ b/jni/modules/filter/Makefile @@ -0,0 +1,4 @@ +top_srcdir = ../.. + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/filter/Makefile.in b/jni/modules/filter/Makefile.in new file mode 100644 index 0000000..60bc80d --- /dev/null +++ b/jni/modules/filter/Makefile.in @@ -0,0 +1,4 @@ +top_srcdir = @top_srcdir@ + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/filter/context-filter.info b/jni/modules/filter/context-filter.info new file mode 100644 index 0000000..d506341 --- /dev/null +++ b/jni/modules/filter/context-filter.info @@ -0,0 +1,23 @@ +# context filter option file + +#This Filter is usable with the following version(s) of Aspell +ASPELL >=0.51 + +#This line will be printed when typing `aspell help context' +DESCRIPTION experimental filter for hiding delimited contexts + +STATIC filter + +OPTION delimiters +TYPE list +DESCRIPTION context delimiters (separated by spaces) +DEFAULT " " +DEFAULT /* */ +DEFAULT // \0 +ENDOPTION + +OPTION visible-first +TYPE bool +DESCRIPTION swaps visible and invisible text +DEFAULT false +ENDOPTION diff --git a/jni/modules/filter/context.cpp b/jni/modules/filter/context.cpp new file mode 100644 index 0000000..8e152c1 --- /dev/null +++ b/jni/modules/filter/context.cpp @@ -0,0 +1,267 @@ +// This file is part of The New Aspell +// Copyright (C) 2002 by Christoph Hintermller under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. +// +// Example for a filter implementation usable via extended filter library +// interface. +// This was added to Aspell by Christoph Hintermller + +#include "settings.h" + +#include "can_have_error.hpp" +#include "config.hpp" +#include "filter_char.hpp" +#include "indiv_filter.hpp" +#include "iostream.hpp" +#include "posib_err.hpp" +#include "string.hpp" +#include "string_enumeration.hpp" +#include "string_list.hpp" +#include "vector.hpp" + +using namespace acommon; + +namespace { + + enum filterstate {hidden=0, visible=1}; + + class ContextFilter : public IndividualFilter { + filterstate state; + Vector<String> opening; + Vector<String> closing; + int correspond; + String filterversion; + + PosibErr<bool> hidecode(FilterChar * begin,FilterChar * end); + public: + ContextFilter(void); + virtual void reset(void); + void process(FilterChar *& start,FilterChar *& stop); + virtual PosibErr<bool> setup(Config * config); + virtual ~ContextFilter(); + }; + + ContextFilter::ContextFilter(void) + : opening(), + closing() + { + state=hidden; + correspond=-1; + opening.resize(3); + opening[0]="\""; + opening[1]="/*"; + opening[2]="//"; + closing.resize(3); + closing[0]="\""; + closing[1]="*/"; + closing[2]=""; + filterversion=VERSION; + } + + PosibErr<bool> ContextFilter::setup(Config * config){ + name_ = "context-filter"; + StringList delimiters; + StringEnumeration * delimiterpairs; + const char * delimiterpair=NULL; + char * repair=NULL; + char * begin=NULL; + char * end=NULL; + String delimiter; + unsigned int countdelim=0; + + if (config == NULL) { + fprintf(stderr,"Nothing to be configured\n"); + return true; + } + + if (config->retrieve_bool("f-context-visible-first")) { + state=visible; + } + + config->retrieve_list("f-context-delimiters", &delimiters); + delimiterpairs=delimiters.elements(); + opening.resize(0); + closing.resize(0); + while ((delimiterpair=delimiterpairs->next())) { + if ((begin=repair=strdup(delimiterpair)) == NULL) { + //fprintf(stderr,"ifailed to initialise %s filter\n",filter_name()); + return false; + } + end=repair+strlen(repair); + while ((*begin != ' ') && (*begin != '\t') && (begin != end)) { + begin++; + } + if (begin == repair) { + fprintf(stderr,"no delimiter pair: `%s'\n",repair); + free(repair); +//FIXME replace someday by make_err + //fprintf(stderr,"ifailed to initialise %s filter\n",filter_name()); + return false; + } + if (((*begin == ' ') || (*begin == '\t')) && (begin != end)) { + *begin='\0'; + opening.resize(opening.size()+1); + opening[opening.size()-1]=repair; + begin++; + } + while (((*begin == ' ') || (*begin == '\t')) && (begin != end)) { + begin++; + } + if ((*begin != ' ') && (*begin != '\t') && (begin != end)) { + closing.resize(closing.size()+1); + if (strcmp(begin,"\\0") != 0) { + closing[closing.size()-1]=begin; + } + else { + closing[closing.size()-1]=""; + } + } + else { + closing.resize(closing.size()+1); + closing[closing.size()-1]=""; + } + free(repair); + } + if (state == visible) { + for (countdelim=0;(countdelim < opening.size()) && + (countdelim < closing.size());countdelim++) { + delimiter=opening[countdelim]; + opening[countdelim]=closing[countdelim]; + closing[countdelim]=delimiter; + } + } + //fprintf(stderr,"%s filter initialised\n",filter_name()); + return true; + } + + + void ContextFilter::process(FilterChar *& start,FilterChar *& stop) { + FilterChar * current=start-1; + FilterChar * beginblind=start; + FilterChar * endblind=stop; + FilterChar * localstop=stop; + int countmasking=0; + int countdelimit=0; + int matchdelim=0; + + if ((localstop > start+1) && (*(localstop-1) == '\0')) { + localstop--; + endblind=localstop; + } + if (state == visible) { + beginblind=endblind; + } + while (( ++current < localstop) && (*current != '\0')) { + if (*current == '\\') { + countmasking++; + continue; + } + if (state == visible) { + if ((countmasking % 2 == 0) && (correspond < 0)) { + for (countdelimit=0; + countdelimit < (signed)closing.size();countdelimit++) { + for (matchdelim=0; + (current+closing[countdelimit].size() < localstop) && + (matchdelim < (signed)closing[countdelimit].size()); + matchdelim++){ +//FIXME Warning about comparison of signed and unsigned in following line + if (current[matchdelim] != closing[countdelimit][matchdelim]) { + break; + } + } + if ((matchdelim == (signed) closing[countdelimit].size()) && + closing[countdelimit].size()) { + correspond=countdelimit; + break; + } + } + } + if ((countmasking % 2 == 0) && (correspond >= 0) && + (correspond < (signed)closing.size()) && + (closing[correspond].size() > 0) && + (current+closing[correspond].size() < localstop)) { + for (matchdelim=0;matchdelim < (signed)closing[correspond].size(); + matchdelim++) { +//FIXME Warning about comparison of signed and unsigned in following line + if (current[matchdelim] != closing[correspond][matchdelim]) { + break; + } + } + if ((matchdelim == (signed) closing[correspond].size()) && + closing[correspond].size()) { + beginblind=current; + endblind=localstop; + state=hidden; + correspond=-1; + } + } + countmasking=0; + continue; + } + if (countmasking % 2) { + countmasking=0; + continue; + } + countmasking=0; + for (countdelimit=0;countdelimit < (signed)opening.size();countdelimit++) { + for (matchdelim=0;(current+opening[countdelimit].size() < localstop) && + (matchdelim < (signed)opening[countdelimit].size()); + matchdelim++) { +//FIXME Warning about comparison of signed and unsigned in following line + if (current[matchdelim] != opening[countdelimit][matchdelim]) { + break; + } + } + if ((matchdelim == (signed) opening[countdelimit].size()) && + opening[countdelimit].size()) { + endblind=current+opening[countdelimit].size(); + state=visible; + hidecode(beginblind,endblind); + current=endblind-1; + beginblind=endblind=localstop; + correspond=countdelimit; + break; + } + } + } + if ((state == visible) && + (correspond >= 0) && (correspond < (signed)closing.size()) && + (closing[correspond] == "") && (countmasking % 2 == 0)) { + state=hidden; + correspond=-1; + } + + if (beginblind < endblind) { + hidecode(beginblind,endblind); + } + } + + PosibErr<bool> ContextFilter::hidecode(FilterChar * begin,FilterChar * end) { + //FIXME here we go, a more efficient context hiding blinding might be used :) + FilterChar * current=begin; + while (current < end) { + if ((*current != '\t') && (*current != '\n') && (*current != '\r')) { + *current=' '; + } + current++; + } + return true; + } + + void ContextFilter::reset(void) { + opening.resize(0); + closing.resize(0); + state=hidden; + } + + ContextFilter::~ContextFilter() { + reset(); + } +} + +C_EXPORT +IndividualFilter * new_aspell_context_filter() { + return new ContextFilter; +} diff --git a/jni/modules/filter/context.lo b/jni/modules/filter/context.lo new file mode 100644 index 0000000..a7071b2 --- /dev/null +++ b/jni/modules/filter/context.lo @@ -0,0 +1,12 @@ +# modules/filter/context.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/context.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/filter/email-filter.info b/jni/modules/filter/email-filter.info new file mode 100644 index 0000000..64b29c1 --- /dev/null +++ b/jni/modules/filter/email-filter.info @@ -0,0 +1,23 @@ +# email filter option file + +#This Filter is usable with the following version(s) of Aspell +ASPELL >=0.51 + +#This line will be printed when typing `Aspell help email' +DESCRIPTION filter for skipping quoted text in email messages + +STATIC filter + +OPTION quote +TYPE list +DESCRIPTION email quote characters +DEFAULT > +DEFAULT | +FLAGS utf-8 +ENDOPTION + +OPTION margin +TYPE int +DESCRIPTION num chars that can appear before the quote char +DEFAULT 10 +ENDOPTION diff --git a/jni/modules/filter/email.cpp b/jni/modules/filter/email.cpp new file mode 100644 index 0000000..9731818 --- /dev/null +++ b/jni/modules/filter/email.cpp @@ -0,0 +1,115 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "settings.h" + +#include "indiv_filter.hpp" +#include "convert.hpp" +#include "config.hpp" +#include "indiv_filter.hpp" +#include "mutable_container.hpp" + +namespace { + + using namespace acommon; + + class EmailFilter : public IndividualFilter + { + bool prev_newline; + bool in_quote; + int margin; + int n; + + class QuoteChars : public MutableContainer { + public: + typedef FilterChar::Chr Value; + Vector<Value> data; + Conv conv; + bool have(Value c) { + Value * i = data.pbegin(); + Value * end = data.pend(); + for (; i != end && *i != c; ++i); + return i != end; + } + PosibErr<bool> add(ParmStr s) { + Value c = *(Value *)conv(s); + if (!have(c)) data.push_back(c); + return true; + } + PosibErr<bool> remove(ParmStr s) { + Value c = *(Value *)conv(s); + Vector<Value>::iterator i = data.begin(); + Vector<Value>::iterator end = data.end(); + for (; i != end && *i != c; ++i); + if (i != end) data.erase(i); + return true; + } + PosibErr<void> clear() { + data.clear(); + return no_err; + } + }; + QuoteChars is_quote_char; + + public: + PosibErr<bool> setup(Config *); + void reset(); + void process(FilterChar * &, FilterChar * &); + }; + + PosibErr<bool> EmailFilter::setup(Config * opts) + { + name_ = "email-filter"; + order_num_ = 0.85; + is_quote_char.conv.setup(*opts, "utf-8", "ucs-4", NormNone); + opts->retrieve_list("f-email-quote", &is_quote_char); + margin = opts->retrieve_int("f-email-margin"); + reset(); + return true; + } + + void EmailFilter::reset() + { + prev_newline = true; + in_quote = false; + n = 0; + } + + void EmailFilter::process(FilterChar * & str, FilterChar * & end) + { + FilterChar * line_begin = str; + FilterChar * cur = str; + while (cur < end) { + if (prev_newline && is_quote_char.have(*cur)) + in_quote = true; + if (*cur == '\n') { + if (in_quote) { + for (FilterChar * i = line_begin; i != cur; ++i) + *i = ' '; + } + line_begin = cur; + in_quote = false; + prev_newline = true; + n = 0; + } else if (n < margin) { + ++n; + } else { + prev_newline = false; + } + ++cur; + } + if (in_quote) + for (FilterChar * i = line_begin; i != cur; ++i) + *i = ' '; + } +} + +C_EXPORT +IndividualFilter * new_aspell_email_filter() { + return new EmailFilter; +} + + diff --git a/jni/modules/filter/email.lo b/jni/modules/filter/email.lo new file mode 100644 index 0000000..eebe4e3 --- /dev/null +++ b/jni/modules/filter/email.lo @@ -0,0 +1,12 @@ +# modules/filter/email.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/email.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/filter/html-filter.info b/jni/modules/filter/html-filter.info new file mode 100644 index 0000000..2bb9f0a --- /dev/null +++ b/jni/modules/filter/html-filter.info @@ -0,0 +1,26 @@ +# SGML filter option file + +LIB-FILE sgml-filter + +#This Filter is usable with the following version(s) of Aspell +ASPELL >=0.51 + +#This line will be printed when typing `Aspell help SGML' +DESCRIPTION filter for dealing with HTML documents + +STATIC filter + +OPTION check +TYPE list +DESCRIPTION HTML attributes to always check +DEFAULT alt +ENDOPTION + +OPTION skip +TYPE list +DESCRIPTION HTML tags to always skip the contents of +DEFAULT script +DEFAULT style +ENDOPTION + +STATIC decoder diff --git a/jni/modules/filter/modes/ccpp.amf b/jni/modules/filter/modes/ccpp.amf new file mode 100644 index 0000000..4de9070 --- /dev/null +++ b/jni/modules/filter/modes/ccpp.amf @@ -0,0 +1,18 @@ +MODE ccpp + +ASPELL >=0.60.1 + +MAGIC /<noregex>/c/cc/cpp +MAGIC /<noregex>/h/hpp + +DESCRIPTION mode for checking C++ comments and string literals + +FILTER url +FILTER context +OPTION clear-context-delimiters +OPTION add-context-delimiters /* */ +OPTION add-context-delimiters // \0 +OPTION add-context-delimiters " " +OPTION disable-context-visible-first + + diff --git a/jni/modules/filter/modes/comment.amf b/jni/modules/filter/modes/comment.amf new file mode 100644 index 0000000..078193b --- /dev/null +++ b/jni/modules/filter/modes/comment.amf @@ -0,0 +1,12 @@ +MODE comment + +ASPELL >=0.60 + +DESCRIPTION mode to check any lines starting with a \# + +FILTER url +FILTER context +OPTION clear-context-delimiters +OPTION add-context-delimiters \# \0 + + diff --git a/jni/modules/filter/modes/email.amf b/jni/modules/filter/modes/email.amf new file mode 100644 index 0000000..988726a --- /dev/null +++ b/jni/modules/filter/modes/email.amf @@ -0,0 +1,8 @@ +MODE email + +ASPELL >=0.60 + +DESCRIPTION mode for skipping quoted text in email messages + +FILTER url +FILTER email diff --git a/jni/modules/filter/modes/html.amf b/jni/modules/filter/modes/html.amf new file mode 100644 index 0000000..f3a8c86 --- /dev/null +++ b/jni/modules/filter/modes/html.amf @@ -0,0 +1,13 @@ +# HTML mode description file + +MODE html + +ASPELL >=0.60 + +MAGIC /0:256:^[ \t]*<[Hh][Tt][Mm][Ll]([ \t]*(<[^>]*>|[^<>]*))*>/htm/html +MAGIC /0:256:^[ \t]*<[h][Tt][Mm][Ll]([ \t]*(<[^>]*>|[^<>]*))*>/HTM/HTML + +DESCRIPTION mode for checking HTML documents + +FILTER url +FILTER html diff --git a/jni/modules/filter/modes/none.amf b/jni/modules/filter/modes/none.amf new file mode 100644 index 0000000..0fad4e8 --- /dev/null +++ b/jni/modules/filter/modes/none.amf @@ -0,0 +1,5 @@ +MODE none + +ASPELL >=0.60.1 + +DESCRIPTION mode to disable all filters diff --git a/jni/modules/filter/modes/nroff.amf b/jni/modules/filter/modes/nroff.amf new file mode 100644 index 0000000..42a3977 --- /dev/null +++ b/jni/modules/filter/modes/nroff.amf @@ -0,0 +1,10 @@ +MODE nroff + +ASPELL >=0.60.1 + +MAGIC /0:3:\.\/"/0/1/2/3/4/5/6/7/8/9/n/man/tmac + +DESCRIPTION mode for checking Nroff documents + +FILTER url +FILTER nroff diff --git a/jni/modules/filter/modes/perl.amf b/jni/modules/filter/modes/perl.amf new file mode 100644 index 0000000..114c49a --- /dev/null +++ b/jni/modules/filter/modes/perl.amf @@ -0,0 +1,16 @@ +MODE perl + +ASPELL >=0.60.1 + +MAGIC /0:256:^[ \t]*\#!((\/\w*)+)\/perl/pl/pm +MAGIC /<noregex>/pl/pm + +DESCRIPTION mode for checking Perl comments and string literals + +FILTER url +FILTER context +OPTION clear-context-delimiters +OPTION add-context-delimiters " " +OPTION add-context-delimiters \# \0 +OPTION disable-context-visible-first + diff --git a/jni/modules/filter/modes/sgml.amf b/jni/modules/filter/modes/sgml.amf new file mode 100644 index 0000000..e1b1c01 --- /dev/null +++ b/jni/modules/filter/modes/sgml.amf @@ -0,0 +1,12 @@ +MODE sgml + +ASPELL >=0.60 + +MAGIC /0:256:^[ \t]*<[Hh][Tt][Mm][Ll]([ \t]*(<[^>]*>|[^<>]*))*>/htm/html +MAGIC /0:256:^[ \t]*<[h][Tt][Mm][Ll]([ \t]*(<[^>]*>|[^<>]*))*>/HTM/HTML + +DESCRIPTION mode for checking generic SGML/XML documents + +FILTER url +FILTER sgml + diff --git a/jni/modules/filter/modes/tex.amf b/jni/modules/filter/modes/tex.amf new file mode 100644 index 0000000..beb32dc --- /dev/null +++ b/jni/modules/filter/modes/tex.amf @@ -0,0 +1,10 @@ +MODE tex + +ASPELL >=0.60 + +MAGIC /0:256:^[ \t]*\\documentclass\[[^\[\]]*\]\{[^\{\}]*\}/tex + +DESCRIPTION mode for checking TeX/LaTeX documents + +FILTER url +FILTER tex diff --git a/jni/modules/filter/modes/texinfo.amf b/jni/modules/filter/modes/texinfo.amf new file mode 100644 index 0000000..0cd1068 --- /dev/null +++ b/jni/modules/filter/modes/texinfo.amf @@ -0,0 +1,10 @@ +MODE texinfo + +ASPELL >=0.60.1 + +MAGIC /<noregex>/texi/texinfo + +DESCRIPTION mode for checking Texinfo documents + +FILTER url +FILTER texinfo diff --git a/jni/modules/filter/modes/url.amf b/jni/modules/filter/modes/url.amf new file mode 100644 index 0000000..24ce649 --- /dev/null +++ b/jni/modules/filter/modes/url.amf @@ -0,0 +1,7 @@ +MODE url + +ASPELL >=0.60 + +DESCRIPTION mode to skip URL like constructs (default mode) + +FILTER url diff --git a/jni/modules/filter/nroff-filter.info b/jni/modules/filter/nroff-filter.info new file mode 100644 index 0000000..858146f --- /dev/null +++ b/jni/modules/filter/nroff-filter.info @@ -0,0 +1,10 @@ +# sgml filter option file + +#This Filter is usable with the following version(s) of Aspell +ASPELL >=0.51 + +#This line will be printed when typing `aspell help nroff' +DESCRIPTION filter for dealing with Nroff documents + +STATIC filter + diff --git a/jni/modules/filter/nroff.cpp b/jni/modules/filter/nroff.cpp new file mode 100644 index 0000000..3be33b8 --- /dev/null +++ b/jni/modules/filter/nroff.cpp @@ -0,0 +1,312 @@ +/* This file is part of The New Aspell + + Copyright (C) 2004 Sergey Poznyakoff + + GNU Aspell free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + GNU Aspell is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with GNU Aspell; see the file COPYING. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <stdio.h> + +#include "settings.h" +#include "asc_ctype.hpp" +#include "config.hpp" +#include "indiv_filter.hpp" +#include "string_map.hpp" +#include "mutable_container.hpp" +#include "clone_ptr-t.hpp" +#include "filter_char_vector.hpp" + +namespace { + using namespace acommon; + + class NroffFilter : public IndividualFilter + { + private: + enum filter_state { + initial, + escape, + request, + font_switch, + size_switch, + skip_char, + skip_digit, + skip_space_before_ident, + skip_ident, + skip_cond, + skip_leading_ws, + argument, + register_reference, + gnu_register_name + } state; + bool newline; // Newline has just been seen. + size_t skip_chars; // Number of characters to skip + char req_name[2]; // Name of the recent nroff request + int pos; // position of the next char in req_name + bool in_request; // are we within a request? + + // Return true if we should ignore argument to the current request. + bool inline ignore_request_argument () + { + static char ignore_req_tab[][3] = { + "ds", + "de", + "nr", + "do", + "so" + }; + for (unsigned i = 0; i < sizeof(ignore_req_tab)/sizeof(ignore_req_tab[0]); + i++) + if (memcmp(ignore_req_tab[i], req_name, 2) == 0) + return true; + return false; + } + + bool process_char (FilterChar::Chr c); + + public: + + PosibErr<bool> setup(Config *); + void reset(); + void process(FilterChar * &, FilterChar * &); + }; + + PosibErr<bool> NroffFilter::setup(Config * opts) + { + name_ = "nroff-filter"; + order_num_ = 0.2; + reset(); + return true; + } + + void NroffFilter::reset() + { + state = initial; + newline = true; + in_request = false; + pos = 0; + skip_chars = 0; + } + + bool NroffFilter::process_char(FilterChar::Chr c) + { + if (skip_chars) + { + skip_chars--; + return true; + } + + switch (state) + { + case initial: + switch (c) + { + case '\\': + state = escape; + return true; + + case '\'': + case '.': + if (newline) + { + state = skip_leading_ws; + return true; + } + else if (in_request) + { + state = request; + pos = 0; + return true; + } + break; + } + break; + + case escape: + switch (c) + { + case 'f': // font switch + state = font_switch; + return true; + + case '*': // string register + case 'n': // numeric register + state = register_reference; + return true; + + case 's': // change size escape + state = size_switch; + return true; + + case '(': + // extended char set: \(XX + skip_chars = 2; + state = initial; + return true; + + case '[': + // extended char set: \[comp1 comp2 ... ] (GNU extension) + state = gnu_register_name; + return true; + + case '"': // comment + state = initial; + return true; + + case '\\': // quoting; + return true; + + case '$': + state = argument; + return true; + + default: + state = initial; + } + break; + + case register_reference: + // Reference to a string or numeric register. + switch (c) + { + case '(': // Traditional nroff + skip_chars = 2; + state = initial; + return true; + + case '[': // register long name (GNU extension) + state = gnu_register_name; + return true; + + default: + state = initial; + } + break; + + case gnu_register_name: + if (c == ']' || c == '\n') + state = initial; + return true; + + case font_switch: + // font change escape. Either + // \f(XY + // or + // \fX + if (c == '(') + skip_chars = 2; + state = initial; + return true; + + case size_switch: + // size chage escape. It can be called in a variety of ways: + // \sN \s+N \s-N \s(NN \s+(NN \s-(NN \s(+NN \s(-NN + if (c == '+' || c == '-') + { + state = skip_char; + return true; + } + /* FALL THROUGH */ + + case skip_char: + state = skip_digit; + return true; + + case skip_digit: + state = initial; + if (asc_isdigit (c)) + return true; + break; + + case skip_leading_ws: + if (asc_isspace(c)) + break; + state = request; + pos = 0; + /* FALL THROUGH */ + + case request: + if (c == '\n' || c == '.') //double-dot + { + state = initial; + } + else + { + req_name[pos++] = c; + if (pos == 2) + { + if (ignore_request_argument ()) + state = skip_space_before_ident; + else if (memcmp (req_name, "if", 2) == 0) + state = skip_cond; + else + state = skip_ident; + } + } + return true; + + case skip_cond: + if (asc_isspace(c)) + return true; + + state = initial; + in_request = true; + if (c == 't' || c == 'n') // if t .. if n + return true; + return process_char(c); // tail recursion; + + case skip_space_before_ident: + if (!asc_isspace(c)) + state = skip_ident; + return true; + + case skip_ident: + if (asc_isspace(c)) + { + state = initial; + in_request = true; + } + return true; + + case argument: + if (asc_isdigit(c)) + return true; + state = initial; + return process_char(c); // tail recursion; + } + + return false; + } + + void NroffFilter::process(FilterChar * & str, FilterChar * & stop) + { + FilterChar * cur = str; + for (; cur != stop; cur++) + { + if (process_char (*cur) && *cur != '\n') + *cur = ' '; + newline = *cur == '\n'; + if (newline) + in_request = false; + } + } + +} + +C_EXPORT +IndividualFilter * new_aspell_nroff_filter() { + return new NroffFilter; +} + + diff --git a/jni/modules/filter/nroff.lo b/jni/modules/filter/nroff.lo new file mode 100644 index 0000000..035fe22 --- /dev/null +++ b/jni/modules/filter/nroff.lo @@ -0,0 +1,12 @@ +# modules/filter/nroff.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/nroff.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/filter/sgml-filter.info b/jni/modules/filter/sgml-filter.info new file mode 100644 index 0000000..92595ca --- /dev/null +++ b/jni/modules/filter/sgml-filter.info @@ -0,0 +1,23 @@ +# SGML filter option file + +LIB-FILE sgml-filter + +#THIS Filter is usable with the following version(s) of Aspell +ASPELL >=0.51 + +#This line will be printed when typing `Aspell help SGML' +DESCRIPTION filter for dealing with generic SGML/XML documents + +STATIC filter + +OPTION check +TYPE list +DESCRIPTION SGML attributes to always check +ENDOPTION + +OPTION skip +TYPE list +DESCRIPTION SGML tags to always skip the contents of +ENDOPTION + +STATIC decoder diff --git a/jni/modules/filter/sgml.cpp b/jni/modules/filter/sgml.cpp new file mode 100644 index 0000000..585c017 --- /dev/null +++ b/jni/modules/filter/sgml.cpp @@ -0,0 +1,604 @@ +// This file is part of The New Aspell +// Copyright (C) 2004 by Tom Snyder +// Copyright (C) 2001-2004 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. +// +// The orignal filter was written by Kevin Atkinson. +// Tom Snyder rewrote the filter to support skipping SGML tags +// +// This filter enables the spell checking of sgml, html, and xhtml files +// by skipping the <elements> and such. +// The overall strategy is based on http://www.w3.org/Library/SGML.c. +// We don't use that code (nor the sourceforge 'expat' project code) for +// simplicity's sake. We don't need to fully parse all aspects of HTML - +// we just need to skip and handle a few aspects. The w3.org code had too +// many linkages into their overall SGML/HTML processing engine. +// +// See the comment at the end of this file for examples of what we handle. +// See the config setting docs regarding our config lists: check and skip. + +#include <stdio.h> // needed for sprintf + +#include "settings.h" + +#include "asc_ctype.hpp" +#include "config.hpp" +#include "indiv_filter.hpp" +#include "string_map.hpp" +#include "mutable_container.hpp" +#include "clone_ptr-t.hpp" +#include "filter_char_vector.hpp" + +//right now unused option +// static const KeyInfo sgml_options[] = { +// {"sgml-extension", KeyInfoList, "html,htm,php,sgml", +// N_("sgml file extensions")} +// }; + +namespace { + + using namespace acommon; + + class ToLowerMap : public StringMap + { + public: + PosibErr<bool> add(ParmStr to_add) { + String new_key; + for (const char * i = to_add; *i; ++i) new_key += asc_tolower(*i); + return StringMap::add(new_key); + } + + PosibErr<bool> remove(ParmStr to_rem) { + String new_key; + for (const char * i = to_rem; *i; ++i) new_key += asc_tolower(*i); + return StringMap::remove(new_key); + } + }; + + class SgmlFilter : public IndividualFilter + { + // State enum. These states track where we are in the HTML/tag/element constructs. + // This diagram shows the main states. The marked number is the state we enter + // *after* we've read that char. Note that some of the state transitions handle + // illegal HTML such as <tag=what?>. + // + // real text <tag attrib = this attrib2='that'>   </tag> { + // | | | | || | | | | | | + // 1 2 3 4 56 7 8 10 11 9 12 + enum ScanState { + S_text, // 1. raw user text outside of any markup. + S_tag, // 2. reading the 'tag' in <tag> + S_tag_gap,// 3. gap between attributes within an element: + S_attr, // 4. Looking at an attrib name + S_attr_gap,// 5. optional gap after attrib name + S_equals, // 6. Attrib equals sign, also space after the equals. + S_value, // 7. In attrib value. + S_quoted, // 8. In quoted attrib value. + S_end, // 9. Same as S_tag, but this is a </zee> type end tag. + S_ignore_junk, // special case invalid area to ignore. + S_ero, // 10. in the &code; special encoding within HTML. + S_entity, // 11. in the alpha named &nom; special encoding.. + S_cro, // 12. after the # of a &#nnn; numerical char reference encoding. + + // SGML.. etc can have these special "declarations" within them. We skip them + // in a more raw manners since they don't abide by the attrib= rules. + // Most importantly, some of the attrib quoting rules don't apply. + // <!ENTITY rtfchar "gg" - - (high, low)> <!-- fully commented --> + // | | || | + // 20 21 23 24 25 + S_md, // 20. In a declaration (or beginning a comment). + S_mdq, // 21. Declaration in quotes - double or single quotes. + S_com_1, // 23. perhaps a comment beginning. + S_com, // 24. Fully in a comment + S_com_e, // 25. Perhaps ending a comment. + + //S_literal, // within a tag pair that means all content should be interpreted literally: <PRE> + // NOT CURRENTLY SUPPORTED FULLY. + + //S_esc,S_dollar,S_paren,S_nonasciitext // WOULD BE USED FOR ISO_2022_JP support. + // NOT CURRENTLY SUPPORTED. + }; + + ScanState in_what; + // which quote char is quoting this attrib value. + FilterChar::Chr quote_val; + // one char prior to this one. For escape handling and such. + FilterChar::Chr lookbehind; + + String tag_name; // we accumulate the current tag name here. + String attrib_name; // we accumulate the current attribute name here. + + bool include_attrib; // are we in one of the attribs that *should* be spell checked (alt=..) + int skipall; // are we in one of the special skip-all content tags? This is treated + // as a bool and as a nesting level count. + String tag_endskip; // tag name that will end that. + + StringMap check_attribs; // list of attribs that we *should* spell check. + StringMap skip_tags; // list of tags that start a no-check-at-all zone. + + String which; + + bool process_char(FilterChar::Chr c); + + public: + + SgmlFilter(const char * n) : which(n) {} + + PosibErr<bool> setup(Config *); + void reset(); + void process(FilterChar * &, FilterChar * &); + }; + + PosibErr<bool> SgmlFilter::setup(Config * opts) + { + name_ = which + "-filter"; + order_num_ = 0.35; + check_attribs.clear(); + skip_tags.clear(); + opts->retrieve_list("f-" + which + "-skip", &skip_tags); + opts->retrieve_list("f-" + which + "-check", &check_attribs); + reset(); + return true; + } + + void SgmlFilter::reset() + { + in_what = S_text; + quote_val = lookbehind = '\0'; + skipall = 0; + include_attrib = false; + } + + // yes this should be inlines, it is only called once + + // RETURNS: TRUE if the caller should skip the passed char and + // not do any spell check on it. FALSE if char is a part of the text + // of the document. + bool SgmlFilter::process_char(FilterChar::Chr c) { + + bool retval = true; // DEFAULT RETURN VALUE. All returns are done + // via retval and falling out the bottom. Except for + // one case that must manage the lookbehind char. + + // PS: this switch will be fast since S_ABCs are an enum and + // any good compiler will build a jump table for it. + // RE the gotos: Sometimes considered bad practice but that is + // how the W3C code (1995) handles it. Could be done also with recursion + // but I doubt that will clarify it. The gotos are done in cases where several + // state changes occur on a single input char. + + switch( in_what ) { + + case S_text: // 1. raw user text outside of any markup. + s_text: + switch( c ) { + case '&': in_what = S_ero; + break; + case '<': in_what = S_tag; tag_name.clear(); + break; + default: + retval = skipall; // ********** RETVAL ASSIGNED + } // ************************** + break; + + case S_tag: // 2. reading the 'tag' in <tag> + // heads up: <foo/bar will be treated as an end tag. That's what w3c does. + switch( c ) { + case '>': goto all_end_tags; + case '/': in_what = S_end; + tag_name.clear(); + break; + case '!': in_what = S_md; + break; + default: // either more alphanum of the tag, or end of tagname: + if( asc_isalpha(c) || asc_isdigit(c) ) { + tag_name += asc_tolower(c); + } + else { // End of the tag: + in_what = S_tag_gap; + goto s_tag_gap; // handle content in that zone. + } + } + break; + + // '>' '>' '>' '>' + all_end_tags: // this gets called by several states to handle the + // possibility of a '>' ending a whole <tag...> guy. + if( c != '>' ) break; + in_what = S_text; + + if( lookbehind == '/' ) { + // Wowza: this is how we handle the <script stuff /> XML style self + // terminating tag. By clearing the tagname out tag-skip-all code + // will not be invoked. + tag_name.clear(); + } + + // Does this tag cause us to skip all content? + if( skipall ) { + // already in a skip-all context. See if this is + // the same skipall tag: + if( !strcmp( tag_name.c_str(), tag_endskip.c_str() ) ) { + ++skipall; // increment our nesting level count. + } + } + else { // Should we begin a skip all range? + skipall = (skip_tags.have( tag_name.c_str() ) ? 1 : 0); + if( skipall ) { + tag_endskip = tag_name; // remember what tag to end on. + } + } + break; + + case S_tag_gap: // 3. gap between attributes within an element: + s_tag_gap: + switch( c ) { + case '>': goto all_end_tags; + + case '=': in_what = S_attr_gap; + break; // uncommon - no-name attrib value + default: + if( asc_isspace( c ) ) break; // still in gap. + else { + in_what = S_attr; // start of attribute name; + attrib_name.clear(); + attrib_name += asc_tolower( c ); + } + break; + } + break; + + case S_end: // 9. Same as S_tag, but this is a </zee> type end tag. + if( asc_isalpha(c) || asc_isdigit(c) ) { + tag_name += asc_tolower( c ); + } + else { + // See if we have left a skipall tag range. + if( skipall && !strcmp( tag_name.c_str(), tag_endskip.c_str() ) ) { + --skipall; // lessen nesting level count. This usually takes us to zero. + } + if( c == '>' ) in_what = S_text; // --don't go to all_end_tags. Really. + else in_what = S_ignore_junk; // no-mans land: </end whats this??> + } + break; + + case S_ignore_junk: // no-mans land state: </end whats this here??> + if( c == '>' ) in_what = S_text; + break; + + case S_attr: // 4. Looking at an attrib name + if( asc_isspace(c) ) in_what = S_attr_gap; + else if( c == '=' ) in_what = S_equals; + else if( c == '>' ) goto all_end_tags; + else { + attrib_name += asc_tolower( c ); + } + break; + + case S_attr_gap: // 5. optional gap after attrib name + if( asc_isspace(c) ) break; + else if( c == '=' ) in_what = S_equals; + else if( c == '>' ) goto all_end_tags; + else { // beginning of a brand new attr + attrib_name.clear(); + attrib_name += asc_tolower( c ); + } + break; + + case S_equals: // 6. Attrib equals sign, also space after the equals. + if( asc_isspace(c) ) break; + switch( c ) { + case '>': goto all_end_tags; + + case '\'': + case '"': in_what = S_quoted; + quote_val = c; + break; + default: in_what = S_value; + break; + } + // See if this attrib deserves full checking: + include_attrib=check_attribs.have( attrib_name.c_str() ); + // Handle the first value char if that is where we are now: + if( in_what == S_value ) goto s_value; + break; + + case S_value: // 7. In attrib value. + s_value: + if( c == '>' ) goto all_end_tags; + else if( asc_isspace(c) ) in_what = S_tag_gap; // end of attrib value + // ***************************** + // ********** RETVAL ASSIGNED + else if( include_attrib ) retval = false; // spell check this value. + break; + + case S_quoted: // 8. In quoted attrib value. + if( c == quote_val && lookbehind != '\\' ) in_what = S_tag_gap; + else if( c == '\\' && lookbehind == '\\' ) { + // This is an escape of an backslash. Therefore the backslash + // does not escape what follows. Therefore we don't leave it in + // the lookbehind. Yikes! + lookbehind = '\0'; + return !include_attrib; // ************* RETURN RETURN RETURN RETURN + } + else retval = !include_attrib; + break; + + // note: these three cases - S_ero, S_cro, and S_entity which all handle + // the &stuff; constructs are broken into 3 states for future upgrades. Someday + // you may want to handle the chars these guys represent as individual chars. + // I don't have the desire nor the knowledge to do it now. -Tom, 5/5/04. + case S_ero: // 10. in the &code; special encoding within HTML. + // &# is a 'Char Ref Open' + if( c == '#' ) { + in_what = S_cro; + break; + } + // FALLTHROUGH INTENTIONAL + + case S_cro: // 12. after the # of a &#nnn; numerical char reference encoding. + case S_entity: // 11. in the alpha named &nom; special encoding.. + if( asc_isalpha(c) || asc_isdigit(c) ) break; // more entity chars. + in_what = S_text; + if( c == ';' ) break; // end of char code. + goto s_text; // ran right into text. Handle it. + + + // SGML.. etc can have these special "declarations" within them. We skip them + // in a more raw manners since they don't abide by the attrib= rules. + // Most importantly, some of the quoting rules don't apply. + // <!ENTITY rtfchar "gg" 'tt' - - (high, low)> <!-- fully commented --> + // | | | || || + // 20 21 22 23 24 25 26 + case S_md: // 20. In a declaration (or comment). + switch( c ) { + case '-': if( lookbehind == '!' ) { + in_what = S_com_1; + } + break; + + case '"': // fallthrough - yes. + case '\'': in_what = S_mdq; + quote_val=c; + break; + case '>': in_what = S_text; // note: NOT all_end_tags cause it's not a real tag. + break; + } + break; + + case S_mdq: // 22. Declaration in quotes. + if( c == quote_val ) in_what = S_md; + else if( c == '>' ) in_what = S_text; + break; + + case S_com_1: // 23. perhaps a comment beginning. + if( c == '-' ) in_what = S_com; + else if( c == '>' ) in_what = S_text; + else in_what = S_md; // out of possible comment. + break; + + case S_com: // 24. Fully in a comment + if( c == '-' && lookbehind == '-' ) in_what = S_com_e; + break; + + case S_com_e: // 25. Perhaps ending a comment. + if( c == '>' ) in_what = S_text; + else if( c != '-' ) in_what = S_com; // back to basic comment. + break; + } + + // update the lookbehind: + lookbehind = c; + + return( retval ); + } + + void SgmlFilter::process(FilterChar * & str, FilterChar * & stop) + { + FilterChar * cur = str; + while (cur != stop) { + if (process_char(*cur)) + *cur = ' '; + ++cur; + } + } + + // + // + // + + class SgmlDecoder : public IndividualFilter + { + FilterCharVector buf; + String which; + public: + SgmlDecoder(const char * n) : which(n) {} + PosibErr<bool> setup(Config *); + void reset() {} + void process(FilterChar * &, FilterChar * &); + }; + + PosibErr<bool> SgmlDecoder::setup(Config *) + { + name_ = which + "-decoder"; + order_num_ = 0.65; + return true; + } + + void SgmlDecoder::process(FilterChar * & start, FilterChar * & stop) + { + buf.clear(); + FilterChar * i = start; + while (i != stop) + { + if (*i == '&') { + FilterChar * i0 = i; + FilterChar::Chr chr; + ++i; + if (i != stop && *i == '#') { + chr = 0; + ++i; + while (i != stop && asc_isdigit(*i)) { + chr *= 10; + chr += *i - '0'; + ++i; + } + } else { + while (i != stop && (asc_isalpha(*i) || asc_isdigit(*i))) { + ++i; + } + chr = '?'; + } + if (i != stop && *i == ';') + ++i; + buf.append(FilterChar(chr, i0, i)); + } else { + buf.append(*i); + ++i; + } + } + buf.append('\0'); + start = buf.pbegin(); + stop = buf.pend() - 1; + } + + // + // Sgml Encoder - BROKEN do not use + // + +// class SgmlEncoder : public IndividualFilter +// { +// FilterCharVector buf; +// String which; +// public: +// SgmlEncoder(const char * n) : which(n) {} +// PosibErr<bool> setup(Config *); +// void reset() {} +// void process(FilterChar * &, FilterChar * &); +// }; + +// PosibErr<bool> SgmlEncoder::setup(Config *) +// { +// name_ = which + "-encoder"; +// order_num_ = 0.99; +// return true; +// } + +// void SgmlEncoder::process(FilterChar * & start, FilterChar * & stop) +// { +// buf.clear(); +// FilterChar * i = start; +// while (i != stop) +// { +// if (*i > 127) { +// buf.append("&#", i->width); +// char b[10]; +// sprintf(b, "%d", i->chr); +// buf.append(b, 0); +// buf.append(';', 0); +// } else { +// buf.append(*i); +// } +// ++i; +// } +// buf.append('\0'); +// start = buf.pbegin(); +// stop = buf.pend() - 1; +// } +} + +C_EXPORT IndividualFilter * new_aspell_sgml_filter() +{ + return new SgmlFilter("sgml"); +} +C_EXPORT IndividualFilter * new_aspell_sgml_decoder() +{ + return new SgmlDecoder("sgml"); +} +// C_EXPORT IndividualFilter * new_aspell_sgml_encoder() +// { +// return new SgmlEncoder("sgml"); +// } + +C_EXPORT IndividualFilter * new_aspell_html_filter() +{ + return new SgmlFilter("html"); +} +C_EXPORT IndividualFilter * new_aspell_html_decoder() +{ + return new SgmlDecoder("html"); +} +// C_EXPORT IndividualFilter * new_aspell_html_encoder() +// { +// return new SgmlEncoder("html"); +// } + + +/* Example HTML: + +<!-- +This file contains several constructs that test the parsing and +handling of SGML/HTML/XML in sgml.cpp. + +The only spelling errors you should see will be the word 'report this NNNN'. +There will be 22 of these. + +run this by executing: +aspell pipe -H < sgmltest.html + +WARNING: this is not really valid HTML. Don't display in a browser! +--> + +<!-- phase 1 - SGML comments. --> +reportthiszphaseONE + <!-- ** 1.0 Valid comments... This file is full of them. --> + <!-- ** 1.1 invalid open comment: --> +<!- not in a comment>reportthisyes</!-> + + <!-- ** 1.2 invalid close comment: --> +<!-- -- > spallwhat DON'T REPORT -> spallwhat DON'T REPORT --> + +<!-- phase 1.5 - special entity encodings --> +reportthisphaseONEFIVE +   don't report this + do not report this. + do not>report this. + this & that. + +<!-- phase 2 - special skip tags --> +reportthisphaseTWO +<SCRIPT> spallwhat DON'T REPORT </SCRIPT> reportthisyes +<style> spallwhat DON'T REPORT </style> reportthisyes +<STYLE something="yes yes" + > spallwhat DON'T REPORT </style > reportthisyes +<script/> reportthisyes <!-- XHTML style terminated tag --> +<script someattrib=value/> reportthisyes <!-- XHTML style terminated tag --> +<!-- Nested skip tags --> +<script> spallwhatnoreport <script> nonoreport </script><b>hello</b> nonoreport</script>reportthisyes + +<!-- phase 3 - special 'include this' attributes --> +reportthisphaseTHREE +<tagname alt="image text reportthisyes" alt2=spallwhat altt="spallwhat don't report"> +<tagname ALT="image text reportthisyes" ALT2=spallwhat AL="spallwhat don't report"> + +<!-- phase 4 - attribute value quoteing and escaping --> +reportthisphaseoneFOUR +<checkthis attribute111=simple/value.value > +<checkagain SOMEattrib = "whoa boy, mimimimspelled "> +<singlequotes gotcha= 'singlypingly quoted///'> +<dblescaped gogogogo="dontcheck \">still in dontcheck\\\" still in dontcheck"> reportthisyes. +<dBLmore TomTomTomTom="so many escapes: \\\\\\\\"> reportthisyes. +<dblescaped gogogogo='dontcheck \'>still in dontcheck\\\' still in dontcheck'> reportthisyes. +<dBLmore TomTomTomTom='so many escapes: \\\\\\\\'> reportthisyes. +<mixnmatch scanhere='">dontcheck \"dontcheck \'dontcheck' alt=reportthisyes> + +<!-- phase 5 - questionable (though all too common) constructs --> +reportthisphaseFIVE +<tag=dontreport> reportthisyes <tag hahahahhaha>reportthisyes +<!-- this one is from Yahoo! --> +<td width=1%><img src="http://wellll/thereeee/nowwww" alt="cool stuff"> +<td width=1%><img src=http://wellll/thereeee/nowwww alt=real cool stuff> + +*/ diff --git a/jni/modules/filter/sgml.lo b/jni/modules/filter/sgml.lo new file mode 100644 index 0000000..5021944 --- /dev/null +++ b/jni/modules/filter/sgml.lo @@ -0,0 +1,12 @@ +# modules/filter/sgml.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/sgml.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/filter/tex-filter.info b/jni/modules/filter/tex-filter.info new file mode 100644 index 0000000..81d9c5b --- /dev/null +++ b/jni/modules/filter/tex-filter.info @@ -0,0 +1,105 @@ +# TeX filter option file + +#This Filter is usable with the following version(s) of Aspell +ASPELL >=0.51 + +#This line will be printed when typing `Aspell help TeX' +DESCRIPTION filter for dealing with TeX/LaTeX documents + +STATIC filter +#STATIC encoder +#STATIC decoder + +OPTION check-comments +TYPE bool +DESCRIPTION check TeX comments +DEFAULT false +ENDOPTION + +OPTION command +TYPE list +DESCRIPTION TeX commands +DEFAULT addtocounter pp +DEFAULT addtolength pp +DEFAULT alpha p +DEFAULT arabic p +DEFAULT fnsymbol p +DEFAULT roman p +DEFAULT stepcounter p +DEFAULT setcounter pp +DEFAULT usecounter p +DEFAULT value p +DEFAULT newcounter po +DEFAULT refstepcounter p +DEFAULT label p +DEFAULT pageref p +DEFAULT ref p +DEFAULT newcommand poOP +DEFAULT renewcommand poOP +DEFAULT newenvironment poOPP +DEFAULT renewenvironment poOPP +DEFAULT newtheorem poPo +DEFAULT newfont pp +DEFAULT documentclass op +DEFAULT usepackage op +DEFAULT begin po +DEFAULT end p +DEFAULT setlength pp +DEFAULT addtolength pp +DEFAULT settowidth pp +DEFAULT settodepth pp +DEFAULT settoheight pp +DEFAULT enlargethispage p +DEFAULT hyphenation p +DEFAULT pagenumbering p +DEFAULT pagestyle p +DEFAULT addvspace p +DEFAULT framebox ooP +DEFAULT hspace p +DEFAULT vspace p +DEFAULT makebox ooP +DEFAULT parbox ooopP +DEFAULT raisebox pooP +DEFAULT rule opp +DEFAULT sbox pO +DEFAULT savebox pooP +DEFAULT usebox p +DEFAULT include p +DEFAULT includeonly p +DEFAULT input p +DEFAULT addcontentsline ppP +DEFAULT addtocontents pP +DEFAULT fontencoding p +DEFAULT fontfamily p +DEFAULT fontseries p +DEFAULT fontshape p +DEFAULT fontsize pp +DEFAULT usefont pppp +DEFAULT documentstyle op +DEFAULT cite p +DEFAULT nocite p +DEFAULT psfig p +DEFAULT selectlanguage p +DEFAULT includegraphics op +DEFAULT bibitem op +DEFAULT geometry p +ENDOPTION + +#OPTION multi-byte +#TYPE list +#DESCRIPTION multi character coded letters (<char>,<rep>[,<rep>[...]]) +#DEFAULT Ä,\\"A,"A +#DEFAULT ä,\\"a,"a +#DEFAULT Ö,\\"O,"O +#DEFAULT ö,\\"o,"o +#DEFAULT Ü,\\"U,"U +#DEFAULT ü,\\"u,"u +#DEFAULT ß,\\"s,"s +#FLAGS utf-8 +#ENDOPTION + +#OPTION hyphen +#TYPE list +#DESCRIPTION characters used to encode hyphenation locations +#DEFAULT \\- +#ENDOPTION diff --git a/jni/modules/filter/tex.cpp b/jni/modules/filter/tex.cpp new file mode 100644 index 0000000..a979539 --- /dev/null +++ b/jni/modules/filter/tex.cpp @@ -0,0 +1,767 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "asc_ctype.hpp" +#include "config.hpp" +#include "string.hpp" +#include "indiv_filter.hpp" +#include "mutable_container.hpp" +#include "string_map.hpp" +#include "clone_ptr-t.hpp" +#include "vector.hpp" +#include "errors.hpp" +#include "convert.hpp" + +//#define FILTER_PROGRESS_CONTROL "tex-filter-debug.log" +//#include "filter_debug.hpp" +//#include <stdio.h> +//#include <cstdio> +#include "filter_char_vector.hpp" +#include "string_list.hpp" +#include "string_enumeration.hpp" + +#include "gettext.h" + +namespace { + + using namespace acommon; + + class TexFilter : public IndividualFilter + { + private: + enum InWhat {Name, Opt, Parm, Other, Swallow}; + struct Command { + InWhat in_what; + String name; + const char * do_check; + Command() {} + Command(InWhat w) : in_what(w), do_check("P") {} + }; + + bool in_comment; + bool prev_backslash; + Vector<Command> stack; + + class Commands : public StringMap { + public: + PosibErr<bool> add(ParmStr to_add); + PosibErr<bool> remove(ParmStr to_rem); + }; + + Commands commands; + bool check_comments; + + inline void push_command(InWhat); + inline void pop_command(); + + bool end_option(char u, char l); + + inline bool process_char(FilterChar::Chr c); + + public: + PosibErr<bool> setup(Config *); + void reset(); + void process(FilterChar * &, FilterChar * &); + }; + + // + // + // + + inline void TexFilter::push_command(InWhat w) { + stack.push_back(Command(w)); + } + + inline void TexFilter::pop_command() { + stack.pop_back(); + if (stack.empty()) + push_command(Parm); + } + + // + // + // + + PosibErr<bool> TexFilter::setup(Config * opts) + { + name_ = "tex-filter"; + order_num_ = 0.35; + //fprintf(stderr,"name %s \n",name_); + + commands.clear(); + opts->retrieve_list("f-tex-command", &commands); + + check_comments = opts->retrieve_bool("f-tex-check-comments"); + + reset(); + return true; + } + + void TexFilter::reset() + { + in_comment = false; + prev_backslash = false; + stack.resize(0); + push_command(Parm); + } + +# define top stack.back() + + // yes this should be inlined, it is only called once + inline bool TexFilter::process_char(FilterChar::Chr c) + { + // deal with comments + if (c == '%' && !prev_backslash) in_comment = true; + if (in_comment && c == '\n') in_comment = false; + + prev_backslash = false; + + if (in_comment) return !check_comments; + + if (top.in_what == Name) { + if (asc_isalpha(c)) { + + top.name += c; + return true; + + } else { + + if (top.name.empty() && (c == '@')) { + top.name += c; + return true; + } + + top.in_what = Other; + + if (top.name.empty()) { + top.name.clear(); + top.name += c; + top.do_check = commands.lookup(top.name.c_str()); + if (top.do_check == 0) top.do_check = ""; + return !asc_isspace(c); + } + + top.do_check = commands.lookup(top.name.c_str()); + if (top.do_check == 0) top.do_check = ""; + + if (asc_isspace(c)) { // swallow extra spaces + top.in_what = Swallow; + return true; + } else if (c == '*') { // ignore * at end of commands + return true; + } + + // continue o... + } + + } else if (top.in_what == Swallow) { + + if (asc_isspace(c)) + return true; + else + top.in_what = Other; + } + + if (c == '{') + while (*top.do_check == 'O' || *top.do_check == 'o') + ++top.do_check; + + if (*top.do_check == '\0') + pop_command(); + + if (c == '{') { + + if (top.in_what == Parm || top.in_what == Opt || top.do_check == '\0') + push_command(Parm); + + top.in_what = Parm; + return true; + } + + if (top.in_what == Other) { + + if (c == '[') { + + top.in_what = Opt; + return true; + + } else if (asc_isspace(c)) { + + return true; + + } else { + + pop_command(); + + } + + } + + if (c == '\\') { + prev_backslash = true; + push_command(Name); + return true; + } + + if (top.in_what == Parm) { + + if (c == '}') + return end_option('P','p'); + else + return *top.do_check == 'p'; + + } else if (top.in_what == Opt) { + + if (c == ']') + return end_option('O', 'o'); + else + return *top.do_check == 'o'; + + } + + return false; + } + + void TexFilter::process(FilterChar * & str, FilterChar * & stop) + { + FilterChar * cur = str; + + while (cur != stop) { + if (process_char(*cur)) + *cur = ' '; + ++cur; + } + } + + bool TexFilter::end_option(char u, char l) { + top.in_what = Other; + if (*top.do_check == u || *top.do_check == l) + ++top.do_check; + return true; + } + + // + // TexFilter::Commands + // + + PosibErr<bool> TexFilter::Commands::add(ParmStr value) { + int p1 = 0; + while (!asc_isspace(value[p1])) { + if (value[p1] == '\0') + return make_err(bad_value, value,"", + _("a string of 'o','O','p',or 'P'")); + ++p1; + } + int p2 = p1 + 1; + while (asc_isspace(value[p2])) { + if (value[p2] == '\0') + return make_err(bad_value, value,"", + _("a string of 'o','O','p',or 'P'")); + ++p2; + } + String t1; t1.assign(value,p1); + String t2; t2.assign(value+p2); + return StringMap::replace(t1, t2); + } + + PosibErr<bool> TexFilter::Commands::remove(ParmStr value) { + int p1 = 0; + while (!asc_isspace(value[p1]) && value[p1] != '\0') ++p1; + String temp; temp.assign(value,p1); + return StringMap::remove(temp); + } +#if 0 + // + // + class Recode { + Vector<char *> code; + int minlength; + public: + Recode(); + Recode(const Recode & recode) {*this=recode;} + void reset(); + bool setExpansion(const char * expander); + virtual int encode(FilterChar * & begin,FilterChar * & end, + FilterCharVector * external); + virtual int decode(FilterChar * & begin,FilterChar * & end, + FilterCharVector * internal); + bool operator == (char test) ; + bool operator != (char test) ; + Recode & operator = (const Recode & rec); + virtual ~Recode(); + }; + + Recode::Recode() + : code(0) + { + minlength=0; + reset(); + } + + Recode & Recode::operator = (const Recode & rec) { + reset(); + code.resize(rec.code.size()); + + int countrec=0; + + for (countrec=0; + countrec < code.size(); + countrec++) { + code[countrec]=NULL; + if (!rec.code[countrec]) { + continue; + } + int length=strlen(rec.code[countrec]); + + code[countrec]= new char[length+1]; + strncpy(code[countrec],rec.code[countrec],length); + code[countrec][length]='\0'; + } + return *this; + } + + + bool Recode::operator == (char test) { + return (code.size() && (code[0][0] == test)); + } + + bool Recode::operator != (char test) { + return (!code.size() || (code[0][0] != test)); + } + + void Recode::reset() { + + unsigned int countcode=0; + + for (countcode=0; + countcode < code.size(); + countcode++) { + if (code[countcode]) { + delete[] code[countcode]; + } + code[countcode] = NULL; + } + code.resize(0); + minlength=0; + } + + bool Recode::setExpansion(const char * expander) { + + char * begin=(char *)expander; + char * end=begin; + char * start=begin; + int keylen=0; + + + if (code.size() > 0) { + keylen=strlen(code[0]); + } + while (begin && end && *begin) { + while (end && *end && (*end != ',')) { + end++; + } + if (end && (begin != end)) { + + char hold = *end; + + *end='\0'; + + int length=strlen(begin); + + if ((begin == start) && (keylen || (length != 1))) { + if ((length != 1) || (keylen != length) || + strncmp(code[0],begin,length)) { + *end=hold; + return false; + } + *end=hold; + if (*end) { + end++; + } + begin=end; + continue; + } + else if (minlength < length) { + minlength=0; + } + + code.resize(code.size()+1); + code[code.size()-1] = new char[length+1]; + strncpy(code[code.size()-1],begin,length); + code[code.size()-1][length]='\0'; + *end=hold; + if (*end) { + end++; + } + begin=end; + } + } + return true; + } + + int Recode::encode(FilterChar * & begin,FilterChar * & end, + FilterCharVector * external) { + if ((code.size() < 2) || + (begin == NULL) || + (begin == end) || + (begin->width < (unsigned int) minlength )) { + return 0; + } + + if (code[0][0] != (char)*begin) { + return 0; + } + external->append(code[1],1); + return strlen(code[0]); + } + + int Recode::decode(FilterChar * & begin,FilterChar * & end, + FilterCharVector * internal) { + + FilterChar * i = begin; + char * codepointer = NULL; + char * codestart = NULL; + + if (code.size() < 2) { + return 0; + } + while((i != end) && + ((codepointer == NULL) || (*codepointer))) { + if (codepointer == NULL) { + + int countcodes=0; + + for (countcodes=1; + countcodes < (int) code.size(); + countcodes++) { + if (*i == code[countcodes][0]) { + codestart=codepointer=code[countcodes]; + break; + } + } + if (codepointer == NULL) { + return 0; + } + } + if (*codepointer != *i) { + return 0; + } + i++; + codepointer++; + } + if ((codepointer == NULL) || (*codepointer)) { + return 0; + } + + int length=strlen(codestart); + internal->append(code[0],length); + return length; + } + + + Recode::~Recode() { + reset(); + } + + class TexEncoder : public IndividualFilter { + Vector<Recode> multibytes; + FilterCharVector buf; + + public: + TexEncoder(); + virtual PosibErr<bool> setup(Config * config); + virtual void process(FilterChar * & start, FilterChar * & stop); + virtual void reset() ; + virtual ~TexEncoder(); + }; + + TexEncoder::TexEncoder() + : multibytes(0), + buf() + { + } + + PosibErr<bool> TexEncoder::setup(Config * config) { + name_ = "tex-encoder"; + order_num_ = 0.40; + + StringList multibytechars; + + config->retrieve_list("f-tex-multi-byte", &multibytechars); + + Conv conv; // this a quick and dirty fix witch will only work for + // iso-8859-1. Full unicode support needs to be + // implemented + conv.setup(*config, "utf-8", "iso-8859-1", NormNone); + + StringEnumeration * multibytelist=multibytechars.elements(); + const char * multibyte0=NULL; + const char * multibyte=NULL; + + while ((multibyte0=multibytelist->next())) { + + multibyte = conv(multibyte0); + + if (strlen(multibyte) < 3) { + fprintf(stderr,"Filter: %s ignoring multi byte encoding `%s'\n", + name_,multibyte); + continue; + } + + int countmulti=0; + + while ((countmulti < multibytes.size()) && + !multibytes[countmulti].setExpansion(multibyte)) { + countmulti++; + } + if (countmulti >= multibytes.size()) { + multibytes.resize(multibytes.size()+1); + if (!multibytes[multibytes.size()-1].setExpansion(multibyte)) { + fprintf(stderr,"Filter: %s ignoring multi byte encoding `%s'\n",name_,multibyte); + continue; + } + } + } + return true; + } + + void TexEncoder::process(FilterChar * & start, FilterChar * & stop) { + buf.clear(); + + FilterChar * i=start; + + while (i && (i != stop)) { + + FilterChar * old = i; + int count=0; + + for (count=0; + count < multibytes.size(); + count++) { + + + i+=multibytes[count].encode(i,stop,&buf); + } + if (i == old) { + buf.append(*i); + i++; + } + } + buf.append('\0'); + start = buf.pbegin(); + stop = buf.pend() - 1; + } + + + void TexEncoder::reset() { + multibytes.resize(0); + buf.clear(); + } + + TexEncoder::~TexEncoder(){ + } + + + class TexDecoder : public IndividualFilter { + Vector<Recode> multibytes; + FilterCharVector buf; + Vector<char *>hyphens; + + public: + TexDecoder(); + virtual PosibErr<bool> setup(Config * config); + virtual void process(FilterChar * & start, FilterChar * & stop); + virtual void reset() ; + virtual ~TexDecoder(); + }; + + TexDecoder::TexDecoder() + : multibytes(0), + buf(), + hyphens() + { + FDEBUGNOTOPEN; + } + + PosibErr<bool> TexDecoder::setup(Config * config) { + name_ = "tex-decoder"; + order_num_ = 0.3; + + StringList multibytechars; + + config->retrieve_list("f-tex-multi-byte", &multibytechars); + + Conv conv; // this a quick and dirty fix witch will only work for + // iso-8859-1. Full unicode support needs to be + // implemented + conv.setup(*config, "utf-8", "iso-8859-1", NormNone); + + StringEnumeration * multibytelist=multibytechars.elements(); + const char * multibyte0=NULL; + const char * multibyte=NULL; + + multibytes.resize(0); + + while ((multibyte0=multibytelist->next())) { + + multibyte = conv(multibyte0); + + if (strlen(multibyte) < 3) { + fprintf(stderr,"Filter: %s ignoring multi byte encoding `%s'\n", + name_,multibyte); + continue; + } + FDEBUGPRINTF("next multibyte chars `"); + FDEBUGPRINTF(multibyte); + FDEBUGPRINTF("'\n"); + + int countmulti=0; + + while ((countmulti < multibytes.size()) && + !multibytes[countmulti].setExpansion(multibyte)) { + countmulti++; + } + FDEBUGPRINTF("next multibyte chars `"); + FDEBUGPRINTF(multibyte); + FDEBUGPRINTF("'\n"); + if (countmulti >= multibytes.size()) { + multibytes.resize(multibytes.size()+1); + if (!multibytes[multibytes.size()-1].setExpansion(multibyte)) { + fprintf(stderr,"Filter: %s ignoring multi byte encoding `%s'\n",name_,multibyte); + continue; + } + } + FDEBUGPRINTF("next multibyte chars `"); + FDEBUGPRINTF(multibyte); + FDEBUGPRINTF("'\n"); + } + StringList hyphenChars; + + config->retrieve_list("f-tex-hyphen", &hyphenChars); + + StringEnumeration * hyphenList=hyphenChars.elements(); + const char * hyphen=NULL; + + hyphens.resize(0); + while ((hyphen=hyphenList->next())) { + FDEBUGPRINTF("next hyphen char `"); + FDEBUGPRINTF(hyphen); + FDEBUGPRINTF("'\n"); + hyphens.push_back(strdup(hyphen)); + } + return true; + } + + void TexDecoder::process(FilterChar * & start, FilterChar * & stop) { + buf.clear(); + + FilterChar * i=start; + + FDEBUGPRINTF("filtin `"); + while (i && (i != stop)) { + + FilterChar * old = i; + int count=0; + + for (count=0; + count < multibytes.size(); + count++) { + + FilterChar * j = i; + + i+=multibytes[count].decode(i,stop,&buf); + + while (j != i) { + char jp[2]={'\0','\0'}; + + jp[0]=*j; + FDEBUGPRINTF(jp); + j++; + } + } + for(count=0; + count < hyphens.size(); + count++) { + if (!hyphens[count]) { + continue; + } + char * hp = &hyphens[count][0]; + char * hpo = hp; + FilterChar * j = i; + while (*hp && (j != stop) && + (*hp == *j)) { + hp++; + j++; + } + if (!*hp) { + FDEBUGPRINTF("{"); + FilterChar * k = i; + while (k != j) { + char kp[2]={'\0','\0'}; + + kp[0]=*k; + FDEBUGPRINTF(kp); + k++; + } + FDEBUGPRINTF("}"); + if (buf.size()) { + buf[buf.size()-1].width+=strlen(hpo); +// buf.append(*i,strlen(hpo)+1); + } + else { +//FIXME better solution for illegal hyphenation at begin of line +// illegal as new line chars are whitespace for latex + buf.append(*i,strlen(hpo)); + char ip[2]={'\0','\0'}; + ip[0]=*i; + FDEBUGPRINTF(ip); + } + i=j; + } + } + if (i == old) { + char ip[2]={'\0','\0'}; + ip[0]=*i; + FDEBUGPRINTF(ip); + buf.append(*i); + i++; + } + } + buf.append('\0'); + start = buf.pbegin(); + stop = buf.pend() - 1; + FDEBUGPRINTF("'\nfiltout `"); + i = start; + while (i != stop) { + char ip[2]={'\0','\0'}; + ip[0]=*i; + FDEBUGPRINTF(ip); + i++; + } + FDEBUGPRINTF("'\n"); + } + + + void TexDecoder::reset() { + multibytes.resize(0); + buf.clear(); + } + + TexDecoder::~TexDecoder(){ + FDEBUGCLOSE; + } +#endif +} + +C_EXPORT +IndividualFilter * new_aspell_tex_filter() {return new TexFilter;} + +#if 0 +C_EXPORT +IndividualFilter * new_aspell_tex_decoder() {return new TexDecoder;} +C_EXPORT +IndividualFilter * new_aspell_tex_encoder() {return new TexEncoder;} +#endif diff --git a/jni/modules/filter/tex.lo b/jni/modules/filter/tex.lo new file mode 100644 index 0000000..7958160 --- /dev/null +++ b/jni/modules/filter/tex.lo @@ -0,0 +1,12 @@ +# modules/filter/tex.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/tex.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/filter/texinfo-filter.info b/jni/modules/filter/texinfo-filter.info new file mode 100644 index 0000000..d7dae6d --- /dev/null +++ b/jni/modules/filter/texinfo-filter.info @@ -0,0 +1,52 @@ +# TeX filter option file + +#This Filter is usable with the following version(s) of Aspell +ASPELL >=0.60 + +#This line will be printed when typing `Aspell help TeX' +DESCRIPTION filter for dealing with Texinfo documents + +STATIC filter + +OPTION ignore +TYPE list +DESCRIPTION Texinfo commands to ignore the parameters of +DEFAULT setfilename +DEFAULT syncodeindex +DEFAULT documentencoding +DEFAULT vskip +DEFAULT code +DEFAULT kbd +DEFAULT key +DEFAULT samp +DEFAULT verb +DEFAULT var +DEFAULT env +DEFAULT file +DEFAULT command +DEFAULT option +DEFAULT url +DEFAULT uref +DEFAULT email +DEFAULT verbatiminclude +DEFAULT xref +DEFAULT ref +DEFAULT pxref +DEFAULT inforef +DEFAULT c +ENDOPTION + +OPTION ignore-env +TYPE list +DESCRIPTION Texinfo environments to ignore +DEFAULT example +DEFAULT smallexample +DEFAULT verbatim +DEFAULT lisp +DEFAULT smalllisp +DEFAULT small +DEFAULT display +DEFAULT snalldisplay +DEFAULT format +DEFAULT smallformat +ENDOPTION diff --git a/jni/modules/filter/texinfo.cpp b/jni/modules/filter/texinfo.cpp new file mode 100644 index 0000000..7be1676 --- /dev/null +++ b/jni/modules/filter/texinfo.cpp @@ -0,0 +1,231 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "asc_ctype.hpp" +#include "config.hpp" +#include "string.hpp" +#include "indiv_filter.hpp" +#include "string_map.hpp" +#include "vector.hpp" + +namespace { + + using namespace acommon; + + class TexInfoFilter : public IndividualFilter + { + private: + struct Command { + bool ignore; + Command(bool i = false) : ignore(i) {} + }; + + struct Table { + String name; + bool ignore_item; + Table(String n) : name(n), ignore_item(false) {} + }; + + String last_command; + + String env_command; + int env_ignore; + + int ignore; + bool in_line_command; + bool seen_input; + Vector<Command> stack; + Vector<Table> table_stack; + + StringMap to_ignore; + StringMap to_ignore_env; + + void reset_stack(); + + public: + PosibErr<bool> setup(Config *); + void reset(); + void process(FilterChar * &, FilterChar * &); + }; + + // + // + // + + PosibErr<bool> TexInfoFilter::setup(Config * opts) + { + name_ = "texinfo-filter"; + order_num_ = 0.35; + + to_ignore.clear(); + opts->retrieve_list("f-texinfo-ignore", &to_ignore); + opts->retrieve_list("f-texinfo-ignore-env", &to_ignore_env); + + reset(); + return true; + } + + void TexInfoFilter::reset_stack() + { + stack.clear(); + stack.push_back(Command()); + in_line_command = false; + ignore = 0; + } + + void TexInfoFilter::reset() + { + reset_stack(); + seen_input = false; + env_command.clear(); + env_ignore = 0; + table_stack.clear(); + table_stack.push_back(Table("")); + } + + void TexInfoFilter::process(FilterChar * & str, FilterChar * & stop) + { + FilterChar * cur = str; + + while (cur != stop) { + + if (*cur == ' ') { + + ++cur; + + } else if (*cur == '@') { + + *cur = ' '; + ++cur; + if (cur == stop) break; + if (asc_isalpha(*cur)) { + + bool was_table = last_command == table_stack.back().name + && (last_command == "table" || last_command == "ftable" + || last_command == "vtable"); + + last_command.clear(); + while (cur != stop && asc_isalpha(*cur)) { + last_command += *cur; + *cur = ' '; + ++cur; + } + + if (env_ignore) { + + // do nothing + + } else if (was_table) { + + if (to_ignore.have(last_command)) + table_stack.back().ignore_item = true; + + } else { + + if (cur == stop || *cur != '{') + in_line_command = true; + else + ++cur; + + if (to_ignore.have(last_command) + || (table_stack.back().ignore_item + && (last_command == "item" || last_command == "itemx"))) + { + stack.push_back(Command(true)); + ++ignore; + } else { + stack.push_back(Command(false)); + } + + if (last_command == "end") { + // do nothing as end command is special + } else if (env_command.empty() && to_ignore_env.have(last_command)) { + env_command = last_command; + env_ignore = 1; + } else if (env_command == last_command) { + env_ignore++; + } else if (last_command.suffix("table")) { + table_stack.push_back(last_command); + } + + } + + } else { + + *cur = ' '; + ++cur; + } + + } else if (!seen_input && *cur == '\\' && stop - cur >= 6 + && cur[1] == 'i' && cur[2] == 'n' && cur[3] == 'p' + && cur[4] == 'u' && cur[5] == 't') { + + last_command.clear(); + for (int i = 0; i != 6; ++i) + *cur++ = ' '; + stack.push_back(Command(true)); + ++ignore; + in_line_command = true; + seen_input = true; + ++cur; + + } else if (last_command == "end") { + + last_command.clear(); + + while (cur != stop && asc_isalpha(*cur)) { + last_command += *cur; + *cur = ' '; + ++cur; + } + + if (last_command == env_command) { + + --env_ignore; + if (env_ignore <= 0) { + env_ignore = 0; + env_command.clear(); + } + + } else if (last_command == table_stack.back().name) { + + table_stack.pop_back(); + if (table_stack.empty()) table_stack.push_back(Table("")); + + } + + last_command.clear(); + + } else { + + last_command.clear(); + if (*cur == '{') { + stack.push_back(Command()); + } else if (*cur == '}') { + if (stack.back().ignore) { + --ignore; + if (ignore < 0) ignore = 0; + } + stack.pop_back(); + if (stack.empty()) + stack.push_back(Command()); + } else if (in_line_command && *cur == '\n') { + reset_stack(); + } else if (ignore || env_ignore) { + *cur = ' '; + } + ++cur; + + } + + } + } + +} + +C_EXPORT +IndividualFilter * new_aspell_texinfo_filter() {return new TexInfoFilter;} + diff --git a/jni/modules/filter/texinfo.lo b/jni/modules/filter/texinfo.lo new file mode 100644 index 0000000..a1a4afb --- /dev/null +++ b/jni/modules/filter/texinfo.lo @@ -0,0 +1,12 @@ +# modules/filter/texinfo.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/texinfo.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/filter/url-filter.info b/jni/modules/filter/url-filter.info new file mode 100644 index 0000000..3a12c3e --- /dev/null +++ b/jni/modules/filter/url-filter.info @@ -0,0 +1,9 @@ +# URL filter option file + +#This Filter is usable with the following version(s) of Aspell +ASPELL >=0.50 + +#This line will be printed when typing `aspell help url' +DESCRIPTION filter to skip URL like constructs + +STATIC filter diff --git a/jni/modules/filter/url.cpp b/jni/modules/filter/url.cpp new file mode 100644 index 0000000..fcf8882 --- /dev/null +++ b/jni/modules/filter/url.cpp @@ -0,0 +1,66 @@ +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "settings.h" +#include "indiv_filter.hpp" +#include "key_info.hpp" + +namespace { + using namespace acommon; + + class UrlFilter : public IndividualFilter { + public: + PosibErr<bool> setup(Config *); + void reset() {} + void process(FilterChar * &, FilterChar * &); + }; + + PosibErr<bool> UrlFilter::setup(Config *) + { + name_ = "url-filter"; + order_num_ = 0.95; + return true; + } + + static bool url_char(char c) + { + return c != '"' && c != ' ' && c != '\n' && c != '\t'; + } + + void UrlFilter::process(FilterChar * & str, FilterChar * & end) + { + for (FilterChar * cur = str; cur < end; ++cur) + { + if (!url_char(*cur)) continue; + FilterChar * cur0 = cur; + bool blank_out = false; + int point_chars = 0; + // only consider special url deciding characters if they are in + // the middle of a word + for (++cur; cur + 1 < end && url_char(cur[1]); ++cur) { + if (blank_out) continue; + if ((cur[0] == '/' && (point_chars > 0 || cur[1] == '/')) + || cur[0] == '@') { + blank_out = true; + } else if (cur[0] == '.' && cur[1] != '.') { + // count multiple '.' as one + if (point_chars < 1) ++point_chars; + else blank_out = true; + } + } + ++cur; + if (blank_out) { + for (; cur0 != cur; ++cur0) *cur0 = ' '; + } + } + } +} + +C_EXPORT +IndividualFilter * new_aspell_url_filter() { + return new UrlFilter; +} + diff --git a/jni/modules/filter/url.lo b/jni/modules/filter/url.lo new file mode 100644 index 0000000..51ba1b6 --- /dev/null +++ b/jni/modules/filter/url.lo @@ -0,0 +1,12 @@ +# modules/filter/url.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/url.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/Makefile b/jni/modules/speller/Makefile new file mode 100644 index 0000000..aac96cc --- /dev/null +++ b/jni/modules/speller/Makefile @@ -0,0 +1,4 @@ +top_srcdir = ../.. + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/speller/Makefile.in b/jni/modules/speller/Makefile.in new file mode 100644 index 0000000..60bc80d --- /dev/null +++ b/jni/modules/speller/Makefile.in @@ -0,0 +1,4 @@ +top_srcdir = @top_srcdir@ + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/speller/default/.deps/.dirstamp b/jni/modules/speller/default/.deps/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/modules/speller/default/.deps/affix.Plo b/jni/modules/speller/default/.deps/affix.Plo new file mode 100644 index 0000000..3697a60 --- /dev/null +++ b/jni/modules/speller/default/.deps/affix.Plo @@ -0,0 +1,396 @@ +modules/speller/default/affix.lo: modules/speller/default/affix.cpp \ + /usr/include/c++/4.5/cstdlib \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/cstddef \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/xlocale.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/cstring /usr/include/string.h \ + /usr/include/bits/string3.h /usr/include/c++/4.5/cstdio \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + modules/speller/default/affix.hpp common/posib_err.hpp common/string.hpp \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/error.hpp common/errors.hpp common/ndebug.hpp \ + modules/speller/default/wordinfo.hpp /usr/include/assert.h \ + common/string.hpp common/fstream.hpp common/posib_err.hpp \ + common/parm_string.hpp common/simple_string.hpp common/char_vector.hpp \ + common/objstack.hpp common/errors.hpp common/getdata.hpp \ + modules/speller/default/check_list.hpp common/speller.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/clone_ptr.hpp common/char_vector.hpp \ + modules/speller/default/speller_impl.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/clone_ptr.hpp \ + common/copy_ptr.hpp modules/speller/default/data.hpp common/ndebug.hpp \ + common/enumeration.hpp common/clone_ptr-t.hpp \ + /usr/include/c++/4.5/typeinfo modules/speller/default/language.hpp \ + common/cache.hpp common/config.hpp common/key_info.hpp common/vector.hpp \ + common/convert.hpp common/filter_char.hpp common/filter_char_vector.hpp \ + common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp common/word_list.hpp \ + common/vararray.hpp common/lsort.hpp common/hash-t.hpp common/hash.hpp \ + /usr/include/c++/4.5/functional /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h gen/settings.h \ + common/block_slist.hpp common/block_slist-t.hpp \ + /usr/include/c++/4.5/cassert common/gettext.h /usr/include/libintl.h + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/cstddef: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/cstring: + +/usr/include/string.h: + +/usr/include/bits/string3.h: + +/usr/include/c++/4.5/cstdio: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +modules/speller/default/wordinfo.hpp: + +/usr/include/assert.h: + +common/string.hpp: + +common/fstream.hpp: + +common/posib_err.hpp: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/errors.hpp: + +common/getdata.hpp: + +modules/speller/default/check_list.hpp: + +common/speller.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/clone_ptr.hpp: + +common/char_vector.hpp: + +modules/speller/default/speller_impl.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/clone_ptr.hpp: + +common/copy_ptr.hpp: + +modules/speller/default/data.hpp: + +common/ndebug.hpp: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +/usr/include/c++/4.5/typeinfo: + +modules/speller/default/language.hpp: + +common/cache.hpp: + +common/config.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +common/convert.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/word_list.hpp: + +common/vararray.hpp: + +common/lsort.hpp: + +common/hash-t.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +gen/settings.h: + +common/block_slist.hpp: + +common/block_slist-t.hpp: + +/usr/include/c++/4.5/cassert: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/modules/speller/default/.deps/data.Plo b/jni/modules/speller/default/.deps/data.Plo new file mode 100644 index 0000000..02c5ccc --- /dev/null +++ b/jni/modules/speller/default/.deps/data.Plo @@ -0,0 +1,389 @@ +modules/speller/default/data.lo: modules/speller/default/data.cpp \ + common/config.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/convert.hpp \ + common/char_vector.hpp common/filter_char.hpp \ + common/filter_char_vector.hpp common/stack_ptr.hpp /usr/include/assert.h \ + common/filter.hpp common/string_pair_enumeration.hpp \ + common/string_pair.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/cache.hpp \ + modules/speller/default/data.hpp common/ndebug.hpp common/copy_ptr.hpp \ + common/enumeration.hpp common/clone_ptr-t.hpp common/clone_ptr.hpp \ + /usr/include/c++/4.5/typeinfo modules/speller/default/language.hpp \ + modules/speller/default/affix.hpp common/posib_err.hpp \ + modules/speller/default/wordinfo.hpp common/string.hpp \ + common/fstream.hpp common/parm_string.hpp common/simple_string.hpp \ + common/char_vector.hpp common/objstack.hpp common/cache.hpp \ + modules/speller/default/phonetic.hpp common/stack_ptr.hpp \ + common/string_enumeration.hpp common/type_id.hpp common/iostream.hpp \ + common/fstream.hpp common/word_list.hpp \ + modules/speller/default/data_id.hpp gen/settings.h \ + /usr/include/sys/stat.h /usr/include/bits/stat.h common/errors.hpp \ + common/file_util.hpp modules/speller/default/speller_impl.hpp \ + common/clone_ptr.hpp common/speller.hpp \ + modules/speller/default/check_list.hpp common/cache-t.hpp \ + common/lock.hpp /usr/include/pthread.h /usr/include/sched.h \ + /usr/include/bits/sched.h /usr/include/bits/setjmp.h common/vararray.hpp \ + common/gettext.h /usr/include/libintl.h + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +modules/speller/default/data.hpp: + +common/ndebug.hpp: + +common/copy_ptr.hpp: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +modules/speller/default/wordinfo.hpp: + +common/string.hpp: + +common/fstream.hpp: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/word_list.hpp: + +modules/speller/default/data_id.hpp: + +gen/settings.h: + +/usr/include/sys/stat.h: + +/usr/include/bits/stat.h: + +common/errors.hpp: + +common/file_util.hpp: + +modules/speller/default/speller_impl.hpp: + +common/clone_ptr.hpp: + +common/speller.hpp: + +modules/speller/default/check_list.hpp: + +common/cache-t.hpp: + +common/lock.hpp: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/setjmp.h: + +common/vararray.hpp: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/modules/speller/default/.deps/editdist.Plo b/jni/modules/speller/default/.deps/editdist.Plo new file mode 100644 index 0000000..751a1f5 --- /dev/null +++ b/jni/modules/speller/default/.deps/editdist.Plo @@ -0,0 +1,147 @@ +modules/speller/default/editdist.lo: modules/speller/default/editdist.cpp \ + /usr/include/c++/4.5/cstring \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/cstddef \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string3.h \ + modules/speller/default/editdist.hpp common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h modules/speller/default/weights.hpp \ + modules/speller/default/matrix.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception /usr/include/c++/4.5/bits/stl_construct.h \ + /usr/include/c++/4.5/bits/stl_uninitialized.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/vararray.hpp + +/usr/include/c++/4.5/cstring: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/cstddef: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +modules/speller/default/editdist.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +modules/speller/default/weights.hpp: + +modules/speller/default/matrix.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/vararray.hpp: diff --git a/jni/modules/speller/default/.deps/language.Plo b/jni/modules/speller/default/.deps/language.Plo new file mode 100644 index 0000000..de0c81f --- /dev/null +++ b/jni/modules/speller/default/.deps/language.Plo @@ -0,0 +1,375 @@ +modules/speller/default/language.lo: modules/speller/default/language.cpp \ + gen/settings.h /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/cstddef \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception /usr/include/c++/4.5/bits/stl_construct.h \ + /usr/include/c++/4.5/bits/stl_uninitialized.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc /usr/include/assert.h \ + common/iostream.hpp common/fstream.hpp /usr/include/stdio.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/string.hpp \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string3.h \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/bits/stdlib.h /usr/include/c++/4.5/algorithm \ + /usr/include/c++/4.5/utility /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_algo.h /usr/include/c++/4.5/cstdlib \ + /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/posib_err.hpp common/error.hpp common/errors.hpp \ + common/ndebug.hpp common/asc_ctype.hpp common/clone_ptr-t.hpp \ + common/clone_ptr.hpp common/generic_copy_ptr.hpp \ + /usr/include/c++/4.5/typeinfo common/generic_copy_ptr-t.hpp \ + common/config.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/key_info.hpp common/vector.hpp common/enumeration.hpp \ + common/clone_ptr-t.hpp common/errors.hpp common/file_data_util.hpp \ + common/fstream.hpp modules/speller/default/language.hpp \ + modules/speller/default/affix.hpp common/posib_err.hpp \ + modules/speller/default/wordinfo.hpp common/string.hpp \ + common/parm_string.hpp common/simple_string.hpp common/char_vector.hpp \ + common/objstack.hpp common/cache.hpp common/convert.hpp \ + common/char_vector.hpp common/filter_char.hpp \ + common/filter_char_vector.hpp common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/cache-t.hpp common/lock.hpp /usr/include/pthread.h \ + /usr/include/sched.h /usr/include/bits/sched.h \ + /usr/include/bits/setjmp.h common/getdata.hpp common/file_util.hpp \ + /usr/include/langinfo.h /usr/include/nl_types.h \ + /usr/include/bits/locale.h common/gettext.h /usr/include/libintl.h + +gen/settings.h: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/cstddef: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +/usr/include/assert.h: + +common/iostream.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/asc_ctype.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +common/generic_copy_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +common/generic_copy_ptr-t.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +common/errors.hpp: + +common/file_data_util.hpp: + +common/fstream.hpp: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +modules/speller/default/wordinfo.hpp: + +common/string.hpp: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/cache-t.hpp: + +common/lock.hpp: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/setjmp.h: + +common/getdata.hpp: + +common/file_util.hpp: + +/usr/include/langinfo.h: + +/usr/include/nl_types.h: + +/usr/include/bits/locale.h: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/modules/speller/default/.deps/leditdist.Plo b/jni/modules/speller/default/.deps/leditdist.Plo new file mode 100644 index 0000000..04681d2 --- /dev/null +++ b/jni/modules/speller/default/.deps/leditdist.Plo @@ -0,0 +1,8 @@ +modules/speller/default/leditdist.lo: \ + modules/speller/default/leditdist.cpp \ + modules/speller/default/leditdist.hpp \ + modules/speller/default/weights.hpp + +modules/speller/default/leditdist.hpp: + +modules/speller/default/weights.hpp: diff --git a/jni/modules/speller/default/.deps/multi_ws.Plo b/jni/modules/speller/default/.deps/multi_ws.Plo new file mode 100644 index 0000000..dca16cf --- /dev/null +++ b/jni/modules/speller/default/.deps/multi_ws.Plo @@ -0,0 +1,355 @@ +modules/speller/default/multi_ws.lo: modules/speller/default/multi_ws.cpp \ + common/config.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc modules/speller/default/data.hpp \ + common/ndebug.hpp /usr/include/assert.h common/copy_ptr.hpp \ + common/enumeration.hpp common/clone_ptr-t.hpp common/clone_ptr.hpp \ + /usr/include/c++/4.5/typeinfo modules/speller/default/language.hpp \ + modules/speller/default/affix.hpp common/posib_err.hpp \ + modules/speller/default/wordinfo.hpp common/string.hpp \ + common/fstream.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/parm_string.hpp \ + common/simple_string.hpp common/char_vector.hpp common/objstack.hpp \ + common/cache.hpp common/convert.hpp common/char_vector.hpp \ + common/filter_char.hpp common/filter_char_vector.hpp \ + common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp common/word_list.hpp \ + common/file_util.hpp common/getdata.hpp common/errors.hpp \ + common/vector.hpp common/gettext.h + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +modules/speller/default/data.hpp: + +common/ndebug.hpp: + +/usr/include/assert.h: + +common/copy_ptr.hpp: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +modules/speller/default/wordinfo.hpp: + +common/string.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/word_list.hpp: + +common/file_util.hpp: + +common/getdata.hpp: + +common/errors.hpp: + +common/vector.hpp: + +common/gettext.h: diff --git a/jni/modules/speller/default/.deps/phonet.Plo b/jni/modules/speller/default/.deps/phonet.Plo new file mode 100644 index 0000000..c5e6f11 --- /dev/null +++ b/jni/modules/speller/default/.deps/phonet.Plo @@ -0,0 +1,335 @@ +modules/speller/default/phonet.lo: modules/speller/default/phonet.cpp \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/assert.h \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception /usr/include/c++/4.5/bits/stl_construct.h \ + /usr/include/c++/4.5/bits/stl_uninitialized.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/asc_ctype.hpp \ + common/string.hpp /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_algo.h /usr/include/c++/4.5/cstdlib \ + /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp modules/speller/default/phonet.hpp \ + common/posib_err.hpp common/string.hpp common/error.hpp \ + common/errors.hpp common/ndebug.hpp common/errors.hpp common/fstream.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + common/posib_err.hpp common/getdata.hpp \ + modules/speller/default/language.hpp modules/speller/default/affix.hpp \ + modules/speller/default/wordinfo.hpp common/parm_string.hpp \ + common/simple_string.hpp common/char_vector.hpp common/objstack.hpp \ + common/cache.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/key_info.hpp common/vector.hpp \ + common/convert.hpp common/char_vector.hpp common/filter_char.hpp \ + common/filter_char_vector.hpp common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp common/vararray.hpp + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/assert.h: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/asc_ctype.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +modules/speller/default/phonet.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/errors.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/posib_err.hpp: + +common/getdata.hpp: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +modules/speller/default/wordinfo.hpp: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/vararray.hpp: diff --git a/jni/modules/speller/default/.deps/phonetic.Plo b/jni/modules/speller/default/.deps/phonetic.Plo new file mode 100644 index 0000000..b69ef4b --- /dev/null +++ b/jni/modules/speller/default/.deps/phonetic.Plo @@ -0,0 +1,338 @@ +modules/speller/default/phonetic.lo: modules/speller/default/phonetic.cpp \ + modules/speller/default/language.hpp modules/speller/default/affix.hpp \ + common/posib_err.hpp common/string.hpp /usr/include/string.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + modules/speller/default/wordinfo.hpp /usr/include/assert.h \ + common/string.hpp common/fstream.hpp /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/posib_err.hpp common/parm_string.hpp \ + common/simple_string.hpp common/char_vector.hpp common/objstack.hpp \ + common/cache.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/generic_copy_ptr-t.hpp \ + common/generic_copy_ptr.hpp common/key_info.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/convert.hpp \ + common/char_vector.hpp common/filter_char.hpp \ + common/filter_char_vector.hpp common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp \ + modules/speller/default/phonet.hpp common/file_util.hpp \ + common/file_data_util.hpp common/clone_ptr-t.hpp common/clone_ptr.hpp \ + /usr/include/c++/4.5/typeinfo + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +modules/speller/default/wordinfo.hpp: + +/usr/include/assert.h: + +common/string.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/posib_err.hpp: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +modules/speller/default/phonet.hpp: + +common/file_util.hpp: + +common/file_data_util.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: diff --git a/jni/modules/speller/default/.deps/primes.Plo b/jni/modules/speller/default/.deps/primes.Plo new file mode 100644 index 0000000..f132aee --- /dev/null +++ b/jni/modules/speller/default/.deps/primes.Plo @@ -0,0 +1,136 @@ +modules/speller/default/primes.lo: modules/speller/default/primes.cpp \ + modules/speller/default/primes.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/cstddef \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception /usr/include/c++/4.5/bits/stl_construct.h \ + /usr/include/c++/4.5/bits/stl_uninitialized.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc /usr/include/c++/4.5/cmath \ + /usr/include/math.h /usr/include/bits/huge_val.h \ + /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \ + /usr/include/bits/inf.h /usr/include/bits/nan.h \ + /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \ + /usr/include/bits/mathinline.h /usr/include/c++/4.5/bits/cmath.tcc \ + /usr/include/c++/4.5/cassert /usr/include/assert.h + +modules/speller/default/primes.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/cstddef: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +/usr/include/c++/4.5/cmath: + +/usr/include/math.h: + +/usr/include/bits/huge_val.h: + +/usr/include/bits/huge_valf.h: + +/usr/include/bits/huge_vall.h: + +/usr/include/bits/inf.h: + +/usr/include/bits/nan.h: + +/usr/include/bits/mathdef.h: + +/usr/include/bits/mathcalls.h: + +/usr/include/bits/mathinline.h: + +/usr/include/c++/4.5/bits/cmath.tcc: + +/usr/include/c++/4.5/cassert: + +/usr/include/assert.h: diff --git a/jni/modules/speller/default/.deps/readonly_ws.Plo b/jni/modules/speller/default/.deps/readonly_ws.Plo new file mode 100644 index 0000000..56f06e5 --- /dev/null +++ b/jni/modules/speller/default/.deps/readonly_ws.Plo @@ -0,0 +1,437 @@ +modules/speller/default/readonly_ws.lo: \ + modules/speller/default/readonly_ws.cpp /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/c++/4.5/bits/concept_check.h /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdio.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + /usr/include/bits/stdio_lim.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h gen/settings.h \ + modules/speller/default/block_vector.hpp common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/error.hpp common/key_info.hpp common/posib_err.hpp \ + common/string.hpp /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/time.h /usr/include/sys/select.h \ + /usr/include/bits/select.h /usr/include/bits/sigset.h \ + /usr/include/bits/time.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/bits/stdlib.h /usr/include/c++/4.5/algorithm \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + common/mutable_string.hpp common/ostream.hpp common/istream.hpp \ + common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc modules/speller/default/data.hpp \ + common/ndebug.hpp /usr/include/assert.h common/copy_ptr.hpp \ + common/enumeration.hpp common/clone_ptr-t.hpp common/clone_ptr.hpp \ + /usr/include/c++/4.5/typeinfo modules/speller/default/language.hpp \ + modules/speller/default/affix.hpp common/posib_err.hpp \ + modules/speller/default/wordinfo.hpp common/string.hpp \ + common/fstream.hpp common/parm_string.hpp common/simple_string.hpp \ + common/char_vector.hpp common/objstack.hpp common/cache.hpp \ + common/convert.hpp common/char_vector.hpp common/filter_char.hpp \ + common/filter_char_vector.hpp common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp common/word_list.hpp \ + modules/speller/default/data_util.hpp /usr/include/c++/4.5/ctime \ + /usr/include/sys/stat.h /usr/include/bits/stat.h common/errors.hpp \ + common/file_util.hpp common/vector.hpp \ + modules/speller/default/vector_hash-t.hpp /usr/include/math.h \ + /usr/include/bits/huge_val.h /usr/include/bits/huge_valf.h \ + /usr/include/bits/huge_vall.h /usr/include/bits/inf.h \ + /usr/include/bits/nan.h /usr/include/bits/mathdef.h \ + /usr/include/bits/mathcalls.h /usr/include/bits/mathinline.h \ + modules/speller/default/vector_hash.hpp \ + modules/speller/default/primes.hpp \ + modules/speller/default/check_list.hpp common/speller.hpp \ + common/lsort.hpp common/gettext.h /usr/include/libintl.h \ + /usr/include/fcntl.h /usr/include/bits/fcntl.h /usr/include/bits/uio.h \ + /usr/include/bits/fcntl2.h /usr/include/unistd.h \ + /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \ + /usr/include/bits/confname.h /usr/include/getopt.h \ + /usr/include/bits/unistd.h /usr/include/sys/mman.h \ + /usr/include/bits/mman.h + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdio.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +/usr/include/bits/stdio_lim.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +gen/settings.h: + +modules/speller/default/block_vector.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +modules/speller/default/data.hpp: + +common/ndebug.hpp: + +/usr/include/assert.h: + +common/copy_ptr.hpp: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +modules/speller/default/wordinfo.hpp: + +common/string.hpp: + +common/fstream.hpp: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/word_list.hpp: + +modules/speller/default/data_util.hpp: + +/usr/include/c++/4.5/ctime: + +/usr/include/sys/stat.h: + +/usr/include/bits/stat.h: + +common/errors.hpp: + +common/file_util.hpp: + +common/vector.hpp: + +modules/speller/default/vector_hash-t.hpp: + +/usr/include/math.h: + +/usr/include/bits/huge_val.h: + +/usr/include/bits/huge_valf.h: + +/usr/include/bits/huge_vall.h: + +/usr/include/bits/inf.h: + +/usr/include/bits/nan.h: + +/usr/include/bits/mathdef.h: + +/usr/include/bits/mathcalls.h: + +/usr/include/bits/mathinline.h: + +modules/speller/default/vector_hash.hpp: + +modules/speller/default/primes.hpp: + +modules/speller/default/check_list.hpp: + +common/speller.hpp: + +common/lsort.hpp: + +common/gettext.h: + +/usr/include/libintl.h: + +/usr/include/fcntl.h: + +/usr/include/bits/fcntl.h: + +/usr/include/bits/uio.h: + +/usr/include/bits/fcntl2.h: + +/usr/include/unistd.h: + +/usr/include/bits/posix_opt.h: + +/usr/include/bits/environments.h: + +/usr/include/bits/confname.h: + +/usr/include/getopt.h: + +/usr/include/bits/unistd.h: + +/usr/include/sys/mman.h: + +/usr/include/bits/mman.h: diff --git a/jni/modules/speller/default/.deps/speller_impl.Plo b/jni/modules/speller/default/.deps/speller_impl.Plo new file mode 100644 index 0000000..da08300 --- /dev/null +++ b/jni/modules/speller/default/.deps/speller_impl.Plo @@ -0,0 +1,388 @@ +modules/speller/default/speller_impl.lo: \ + modules/speller/default/speller_impl.cpp /usr/include/stdlib.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/xlocale.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/typeinfo /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + common/clone_ptr-t.hpp common/clone_ptr.hpp common/generic_copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp common/error.hpp \ + common/key_info.hpp common/posib_err.hpp common/string.hpp \ + /usr/include/string.h /usr/include/bits/string3.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/errors.hpp common/ndebug.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc modules/speller/default/data.hpp \ + common/ndebug.hpp /usr/include/assert.h common/copy_ptr.hpp \ + common/enumeration.hpp common/clone_ptr-t.hpp \ + modules/speller/default/language.hpp modules/speller/default/affix.hpp \ + common/posib_err.hpp modules/speller/default/wordinfo.hpp \ + common/string.hpp common/fstream.hpp /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/parm_string.hpp \ + common/simple_string.hpp common/char_vector.hpp common/objstack.hpp \ + common/cache.hpp common/convert.hpp common/char_vector.hpp \ + common/filter_char.hpp common/filter_char_vector.hpp \ + common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp common/word_list.hpp \ + modules/speller/default/data_id.hpp gen/settings.h \ + /usr/include/sys/stat.h /usr/include/bits/stat.h common/errors.hpp \ + modules/speller/default/speller_impl.hpp common/clone_ptr.hpp \ + common/speller.hpp modules/speller/default/check_list.hpp \ + common/string_list.hpp common/string_enumeration.hpp \ + common/mutable_container.hpp /usr/include/c++/4.5/cstdio \ + modules/speller/default/suggest.hpp common/tokenizer.hpp \ + common/gettext.h /usr/include/libintl.h + +/usr/include/stdlib.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/xlocale.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/typeinfo: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +common/generic_copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/error.hpp: + +common/key_info.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/bits/string3.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +modules/speller/default/data.hpp: + +common/ndebug.hpp: + +/usr/include/assert.h: + +common/copy_ptr.hpp: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +modules/speller/default/wordinfo.hpp: + +common/string.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/word_list.hpp: + +modules/speller/default/data_id.hpp: + +gen/settings.h: + +/usr/include/sys/stat.h: + +/usr/include/bits/stat.h: + +common/errors.hpp: + +modules/speller/default/speller_impl.hpp: + +common/clone_ptr.hpp: + +common/speller.hpp: + +modules/speller/default/check_list.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/mutable_container.hpp: + +/usr/include/c++/4.5/cstdio: + +modules/speller/default/suggest.hpp: + +common/tokenizer.hpp: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/modules/speller/default/.deps/suggest.Plo b/jni/modules/speller/default/.deps/suggest.Plo new file mode 100644 index 0000000..588766c --- /dev/null +++ b/jni/modules/speller/default/.deps/suggest.Plo @@ -0,0 +1,433 @@ +modules/speller/default/suggest.lo: modules/speller/default/suggest.cpp \ + common/getdata.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/string.hpp /usr/include/string.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp common/mutable_string.hpp common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/fstream.hpp /usr/include/stdio.h \ + /usr/include/libio.h /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/posib_err.hpp common/error.hpp \ + common/errors.hpp common/ndebug.hpp \ + modules/speller/default/speller_impl.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/clone_ptr.hpp \ + common/generic_copy_ptr.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp modules/speller/default/data.hpp \ + common/ndebug.hpp /usr/include/assert.h common/enumeration.hpp \ + common/clone_ptr-t.hpp common/clone_ptr.hpp \ + /usr/include/c++/4.5/typeinfo modules/speller/default/language.hpp \ + modules/speller/default/affix.hpp common/posib_err.hpp \ + modules/speller/default/wordinfo.hpp common/string.hpp \ + common/parm_string.hpp common/simple_string.hpp common/char_vector.hpp \ + common/objstack.hpp common/cache.hpp common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp common/key_info.hpp \ + common/vector.hpp common/convert.hpp common/char_vector.hpp \ + common/filter_char.hpp common/filter_char_vector.hpp \ + common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp common/word_list.hpp \ + common/speller.hpp modules/speller/default/check_list.hpp \ + modules/speller/default/asuggest.hpp modules/speller/default/suggest.hpp \ + modules/speller/default/editdist.hpp modules/speller/default/weights.hpp \ + modules/speller/default/typo_editdist.hpp \ + modules/speller/default/matrix.hpp common/basic_list.hpp \ + /usr/include/c++/4.5/list /usr/include/c++/4.5/bits/stl_list.h \ + /usr/include/c++/4.5/bits/list.tcc common/clone_ptr-t.hpp \ + modules/speller/default/editdist2.hpp \ + modules/speller/default/leditdist.hpp /usr/include/c++/4.5/cassert \ + common/errors.hpp common/file_data_util.hpp common/hash-t.hpp \ + common/hash.hpp /usr/include/c++/4.5/functional \ + /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h gen/settings.h \ + common/block_slist.hpp common/block_slist-t.hpp common/vararray.hpp \ + common/string_list.hpp common/string_enumeration.hpp \ + common/mutable_container.hpp /usr/include/c++/4.5/cstdio \ + common/gettext.h /usr/include/libintl.h + +common/getdata.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +modules/speller/default/speller_impl.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/clone_ptr.hpp: + +common/generic_copy_ptr.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +modules/speller/default/data.hpp: + +common/ndebug.hpp: + +/usr/include/assert.h: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +modules/speller/default/wordinfo.hpp: + +common/string.hpp: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/word_list.hpp: + +common/speller.hpp: + +modules/speller/default/check_list.hpp: + +modules/speller/default/asuggest.hpp: + +modules/speller/default/suggest.hpp: + +modules/speller/default/editdist.hpp: + +modules/speller/default/weights.hpp: + +modules/speller/default/typo_editdist.hpp: + +modules/speller/default/matrix.hpp: + +common/basic_list.hpp: + +/usr/include/c++/4.5/list: + +/usr/include/c++/4.5/bits/stl_list.h: + +/usr/include/c++/4.5/bits/list.tcc: + +common/clone_ptr-t.hpp: + +modules/speller/default/editdist2.hpp: + +modules/speller/default/leditdist.hpp: + +/usr/include/c++/4.5/cassert: + +common/errors.hpp: + +common/file_data_util.hpp: + +common/hash-t.hpp: + +common/hash.hpp: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +gen/settings.h: + +common/block_slist.hpp: + +common/block_slist-t.hpp: + +common/vararray.hpp: + +common/string_list.hpp: + +common/string_enumeration.hpp: + +common/mutable_container.hpp: + +/usr/include/c++/4.5/cstdio: + +common/gettext.h: + +/usr/include/libintl.h: diff --git a/jni/modules/speller/default/.deps/typo_editdist.Plo b/jni/modules/speller/default/.deps/typo_editdist.Plo new file mode 100644 index 0000000..fae20b9 --- /dev/null +++ b/jni/modules/speller/default/.deps/typo_editdist.Plo @@ -0,0 +1,360 @@ +modules/speller/default/typo_editdist.lo: \ + modules/speller/default/typo_editdist.cpp /usr/include/c++/4.5/cstring \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/cstddef \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/string.h /usr/include/xlocale.h /usr/include/bits/string3.h \ + common/vararray.hpp modules/speller/default/typo_editdist.hpp \ + common/cache.hpp common/posib_err.hpp common/string.hpp \ + /usr/include/stdlib.h /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h /usr/include/endian.h \ + /usr/include/bits/endian.h /usr/include/bits/byteswap.h \ + /usr/include/sys/types.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/time.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + modules/speller/default/matrix.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/config.hpp \ + common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/key_info.hpp common/vector.hpp \ + modules/speller/default/language.hpp modules/speller/default/affix.hpp \ + common/posib_err.hpp modules/speller/default/wordinfo.hpp \ + /usr/include/assert.h common/string.hpp common/fstream.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h \ + common/parm_string.hpp common/simple_string.hpp common/char_vector.hpp \ + common/objstack.hpp common/convert.hpp common/char_vector.hpp \ + common/filter_char.hpp common/filter_char_vector.hpp \ + common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp common/file_data_util.hpp \ + common/getdata.hpp common/cache-t.hpp common/lock.hpp gen/settings.h \ + /usr/include/pthread.h /usr/include/sched.h /usr/include/bits/sched.h \ + /usr/include/bits/setjmp.h common/asc_ctype.hpp + +/usr/include/c++/4.5/cstring: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/cstddef: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/string.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +common/vararray.hpp: + +modules/speller/default/typo_editdist.hpp: + +common/cache.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +modules/speller/default/matrix.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +modules/speller/default/wordinfo.hpp: + +/usr/include/assert.h: + +common/string.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/file_data_util.hpp: + +common/getdata.hpp: + +common/cache-t.hpp: + +common/lock.hpp: + +gen/settings.h: + +/usr/include/pthread.h: + +/usr/include/sched.h: + +/usr/include/bits/sched.h: + +/usr/include/bits/setjmp.h: + +common/asc_ctype.hpp: diff --git a/jni/modules/speller/default/.deps/writable.Plo b/jni/modules/speller/default/.deps/writable.Plo new file mode 100644 index 0000000..bebc4d0 --- /dev/null +++ b/jni/modules/speller/default/.deps/writable.Plo @@ -0,0 +1,381 @@ +modules/speller/default/writable.lo: modules/speller/default/writable.cpp \ + /usr/include/time.h /usr/include/features.h /usr/include/bits/predefs.h \ + /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h \ + /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/bits/time.h /usr/include/bits/types.h \ + /usr/include/bits/typesizes.h /usr/include/xlocale.h common/hash-t.hpp \ + /usr/include/c++/4.5/cstdlib \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/cstddef /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/sys/sysmacros.h \ + /usr/include/bits/pthreadtypes.h /usr/include/alloca.h \ + /usr/include/bits/stdlib.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception common/hash.hpp \ + /usr/include/c++/4.5/utility /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/functional /usr/include/c++/4.5/bits/stl_function.h \ + /usr/include/c++/4.5/backward/binders.h gen/settings.h \ + common/hash_fun.hpp common/block_slist.hpp common/block_slist-t.hpp \ + /usr/include/c++/4.5/cassert /usr/include/assert.h \ + modules/speller/default/data.hpp common/ndebug.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/enumeration.hpp common/clone_ptr-t.hpp common/clone_ptr.hpp \ + /usr/include/c++/4.5/typeinfo modules/speller/default/language.hpp \ + modules/speller/default/affix.hpp common/posib_err.hpp common/string.hpp \ + /usr/include/string.h /usr/include/bits/string3.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/error.hpp common/errors.hpp common/ndebug.hpp \ + modules/speller/default/wordinfo.hpp common/string.hpp \ + common/fstream.hpp /usr/include/stdio.h /usr/include/libio.h \ + /usr/include/_G_config.h /usr/include/wchar.h \ + /usr/include/bits/sys_errlist.h /usr/include/bits/stdio.h \ + /usr/include/bits/stdio2.h common/posib_err.hpp common/parm_string.hpp \ + common/simple_string.hpp common/char_vector.hpp common/objstack.hpp \ + common/cache.hpp common/config.hpp common/can_have_error.hpp \ + common/copy_ptr.hpp common/key_info.hpp common/vector.hpp \ + /usr/include/c++/4.5/vector /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/convert.hpp \ + common/char_vector.hpp common/filter_char.hpp \ + common/filter_char_vector.hpp common/stack_ptr.hpp common/filter.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + common/cache.hpp modules/speller/default/phonetic.hpp \ + common/stack_ptr.hpp common/string_enumeration.hpp common/type_id.hpp \ + common/iostream.hpp common/fstream.hpp common/word_list.hpp \ + modules/speller/default/data_util.hpp /usr/include/c++/4.5/ctime \ + /usr/include/sys/stat.h /usr/include/bits/stat.h common/errors.hpp \ + common/file_util.hpp common/getdata.hpp + +/usr/include/time.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/bits/time.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/xlocale.h: + +common/hash-t.hpp: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +common/hash.hpp: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/functional: + +/usr/include/c++/4.5/bits/stl_function.h: + +/usr/include/c++/4.5/backward/binders.h: + +gen/settings.h: + +common/hash_fun.hpp: + +common/block_slist.hpp: + +common/block_slist-t.hpp: + +/usr/include/c++/4.5/cassert: + +/usr/include/assert.h: + +modules/speller/default/data.hpp: + +common/ndebug.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/enumeration.hpp: + +common/clone_ptr-t.hpp: + +common/clone_ptr.hpp: + +/usr/include/c++/4.5/typeinfo: + +modules/speller/default/language.hpp: + +modules/speller/default/affix.hpp: + +common/posib_err.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/bits/string3.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +modules/speller/default/wordinfo.hpp: + +common/string.hpp: + +common/fstream.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/posib_err.hpp: + +common/parm_string.hpp: + +common/simple_string.hpp: + +common/char_vector.hpp: + +common/objstack.hpp: + +common/cache.hpp: + +common/config.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/key_info.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/convert.hpp: + +common/char_vector.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/stack_ptr.hpp: + +common/filter.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +common/cache.hpp: + +modules/speller/default/phonetic.hpp: + +common/stack_ptr.hpp: + +common/string_enumeration.hpp: + +common/type_id.hpp: + +common/iostream.hpp: + +common/fstream.hpp: + +common/word_list.hpp: + +modules/speller/default/data_util.hpp: + +/usr/include/c++/4.5/ctime: + +/usr/include/sys/stat.h: + +/usr/include/bits/stat.h: + +common/errors.hpp: + +common/file_util.hpp: + +common/getdata.hpp: diff --git a/jni/modules/speller/default/.dirstamp b/jni/modules/speller/default/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/modules/speller/default/Makefile b/jni/modules/speller/default/Makefile new file mode 100644 index 0000000..906db8c --- /dev/null +++ b/jni/modules/speller/default/Makefile @@ -0,0 +1,4 @@ +top_srcdir = ../../.. + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/speller/default/Makefile.in b/jni/modules/speller/default/Makefile.in new file mode 100644 index 0000000..60bc80d --- /dev/null +++ b/jni/modules/speller/default/Makefile.in @@ -0,0 +1,4 @@ +top_srcdir = @top_srcdir@ + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/speller/default/affix.cpp b/jni/modules/speller/default/affix.cpp new file mode 100644 index 0000000..2562c24 --- /dev/null +++ b/jni/modules/speller/default/affix.cpp @@ -0,0 +1,1439 @@ +// This file is part of The New Aspell +// Copyright (C) 2004 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. +// +// This code is based on the the MySpell affix code: +// +/* + * Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada And + * Contributors. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. All modifications to the source code must be clearly marked as + * such. Binary redistributions based on modified source code + * must be clearly marked as modified versions in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY KEVIN B. HENDRICKS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * KEVIN B. HENDRICKS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +#include <cstdlib> +#include <cstring> +#include <cstdio> + +//#include "iostream.hpp" + +#include "affix.hpp" +#include "errors.hpp" +#include "getdata.hpp" +#include "parm_string.hpp" +#include "check_list.hpp" +#include "speller_impl.hpp" +#include "vararray.hpp" +#include "lsort.hpp" +#include "hash-t.hpp" + +#include "gettext.h" + +using namespace std; + +namespace aspeller { + +typedef unsigned char byte; +static char EMPTY[1] = {0}; + +////////////////////////////////////////////////////////////////////// +// +// Entry struct definations +// + +struct Conds +{ + char * str; + unsigned num; + char conds[SETSIZE]; + char get(byte i) const {return conds[i];} +}; + +struct AffEntry +{ + const char * appnd; + const char * strip; + byte appndl; + byte stripl; + byte xpflg; + char achar; + const Conds * conds; + //unsigned int numconds; + //char conds[SETSIZE]; +}; + +// A Prefix Entry + +struct PfxEntry : public AffEntry +{ + PfxEntry * next; + PfxEntry * next_eq; + PfxEntry * next_ne; + PfxEntry * flag_next; + PfxEntry() {} + + bool check(const LookupInfo &, const AffixMgr * pmyMgr, + ParmString, CheckInfo &, GuessInfo *, bool cross = true) const; + + inline bool allow_cross() const { return ((xpflg & XPRODUCT) != 0); } + inline byte flag() const { return achar; } + inline const char * key() const { return appnd; } + bool applicable(SimpleString) const; + SimpleString add(SimpleString, ObjStack & buf) const; +}; + +// A Suffix Entry + +struct SfxEntry : public AffEntry +{ + const char * rappnd; // this is set in AffixMgr::build_sfxlist + + SfxEntry * next; + SfxEntry * next_eq; + SfxEntry * next_ne; + SfxEntry * flag_next; + + SfxEntry() {} + + bool check(const LookupInfo &, ParmString, CheckInfo &, GuessInfo *, + int optflags, AffEntry * ppfx); + + inline bool allow_cross() const { return ((xpflg & XPRODUCT) != 0); } + inline byte flag() const { return achar; } + inline const char * key() const { return rappnd; } + bool applicable(SimpleString) const; + SimpleString add(SimpleString, ObjStack & buf, int limit, SimpleString) const; +}; + +////////////////////////////////////////////////////////////////////// +// +// Utility functions declarations +// + +/* return 1 if s1 is subset of s2 */ +static bool isSubset(const char * s1, const char * s2) +{ + while( *s1 && (*s1 == *s2) ) { + s1++; + s2++; + } + return (*s1 == '\0'); +} + +// return 1 if s1 (reversed) is a leading subset of end of s2 +static bool isRevSubset(const char * s1, const char * end_of_s2, int len) +{ + while( (len > 0) && *s1 && (*s1 == *end_of_s2) ) { + s1++; + end_of_s2--; + len --; + } + return (*s1 == '\0'); +} + +template <class T> +struct AffixLess +{ + bool operator() (T * x, T * y) const {return strcmp(x->key(),y->key()) < 0;} +}; + +// struct StringLookup { +// struct Parms { +// typedef const char * Value; +// typedef const char * Key; +// static const bool is_multi = false; +// hash<const char *> hfun; +// size_t hash(const char * s) {return hfun(s);} +// bool equal(const char * x, const char * y) {return strcmp(x,y) == 0;} +// const char * key(const char * c) {return c;} +// }; +// typedef HashTable<Parms> Lookup; +// Lookup lookup; +// ObjStack * data_buf; +// StringLookup(ObjStack * b) : data_buf(b) {} +// const char * dup(const char * orig) { +// pair<Lookup::iterator, bool> res = lookup.insert(orig); +// if (res.second) *res.first = data_buf->dup(orig); +// return *res.first; +// //return data_buf->dup(orig); +// } +// }; + +struct CondsLookupParms { + typedef const Conds * Value; + typedef const char * Key; + static const bool is_multi = false; + acommon::hash<const char *> hfun; + size_t hash(const char * s) {return hfun(s);} + bool equal(const char * x, const char * y) {return strcmp(x,y) == 0;} + const char * key(const Conds * c) {return c->str;} +}; + +typedef HashTable<CondsLookupParms> CondsLookup; + +// normalizes and checks the cond_str +// returns the lenth of the new string or -1 if invalid +static int normalize_cond_str(char * str) +{ + char * s = str; + char * d = str; + while (*s) { + if (*s != '[') { + *d++ = *s++; + } else if (s[1] == '\0' || s[1] == ']') { + return -1; + } else if (s[2] == ']') { + *d++ = s[1]; + s += 3; + } else { + *d++ = *s++; + if (*s == '^') *d++ = *s++; + while (*s != ']') { + if (*s == '\0' || *s == '[') return -1; + char * min = s; + for (char * i = s + 1; *i != ']'; ++i) { + if ((byte)*i < (byte)*min) min = i;} + char c = *s; + *d++ = *min; + *min = c; + ++s; + } + *d++ = *s++; + } + } + *d = '\0'; + return d - str; +} + +static void encodeit(CondsLookup &, ObjStack &, + AffEntry * ptr, char * cs); + +////////////////////////////////////////////////////////////////////// +// +// Affix Manager +// + +PosibErr<void> AffixMgr::setup(ParmString affpath, Conv & iconv) +{ + // register hash manager and load affix data from aff file + //cpdmin = 3; // default value + max_strip_ = 0; + for (int i=0; i < SETSIZE; i++) { + pStart[i] = NULL; + sStart[i] = NULL; + pFlag[i] = NULL; + sFlag[i] = NULL; + max_strip_f[i] = 0; + } + return parse_file(affpath, iconv); +} + +AffixMgr::AffixMgr(const Language * l) + : lang(l), data_buf(1024*16) {} + +AffixMgr::~AffixMgr() {} + +static inline void max_(int & lhs, int rhs) +{ + if (lhs < rhs) lhs = rhs; +} + +// read in aff file and build up prefix and suffix entry objects +PosibErr<void> AffixMgr::parse_file(const char * affpath, Conv & iconv) +{ + // io buffers + String buf; DataPair dp; + + CondsLookup conds_lookup; + + // open the affix file + affix_file = data_buf.dup(affpath); + FStream afflst; + RET_ON_ERR(afflst.open(affpath,"r")); + + // step one is to parse the affix file building up the internal + // affix data structures + + // read in each line ignoring any that do not + // start with a known line type indicator + + char prev_aff = '\0'; + + while (getdata_pair(afflst,dp,buf)) { + char affix_type = ' '; + + /* parse in the name of the character set used by the .dict and .aff */ + + if (dp.key == "SET") { + String buf; + encoding = data_buf.dup(fix_encoding_str(dp.value, buf)); + if (strcmp(encoding, lang->data_encoding()) != 0) + return make_err(incorrect_encoding, affix_file, lang->data_encoding(), encoding); + } + + /* parse in the flag used by the controlled compound words */ + //else if (d.key == "COMPOUNDFLAG") + // compound = data_buf.dup(d.value); + + /* parse in the flag used by the controlled compound words */ + //else if (d.key == "COMPOUNDMIN") + // cpdmin = atoi(d.value); // FiXME + + //else if (dp.key == "TRY" || dp.key == "REP"); + + else if (dp.key == "PFX" || dp.key == "SFX") + affix_type = dp.key[0]; + + if (affix_type == ' ') continue; + + // + // parse this affix: P - prefix, S - suffix + // + + int numents = 0; // number of affentry structures to parse + char achar='\0'; // affix char identifier + short xpflg=0; + AffEntry * nptr; + { + // split affix header line into pieces + split(dp); + if (dp.key.empty()) goto error; + // key is affix char + const char * astr = iconv(dp.key); + if (astr[0] == '\0' || astr[1] != '\0') goto error; + achar = astr[0]; + if (achar == prev_aff) goto error_count; + prev_aff = achar; + + split(dp); + if (dp.key.size != 1 || + !(dp.key[0] == 'Y' || dp.key[0] == 'N')) goto error; + // key is cross product indicator + if (dp.key[0] == 'Y') xpflg = XPRODUCT; + + split(dp); + if (dp.key.empty()) goto error; + // key is number of affentries + + numents = atoi(dp.key); + + for (int j = 0; j < numents; j++) { + getdata_pair(afflst, dp, buf); + + if (affix_type == 'P') { + nptr = (AffEntry *) data_buf.alloc_bottom(sizeof(PfxEntry)); + new (nptr) PfxEntry; + } else { + nptr = (AffEntry *) data_buf.alloc_bottom(sizeof(SfxEntry)); + new (nptr) SfxEntry; + } + + nptr->xpflg = xpflg; + + split(dp); + if (dp.key.empty()) goto error; + // key is affix charter + if (iconv(dp.key)[0] != achar) goto error_count; + nptr->achar = achar; + + split(dp); + if (dp.key.empty()) goto error; + // key is strip + if (dp.key != "0") { + ParmString s0(iconv(dp.key)); + max_(max_strip_, s0.size()); + max_(max_strip_f[(byte)achar], s0.size()); + nptr->strip = data_buf.dup(s0); + nptr->stripl = s0.size(); + } else { + nptr->strip = ""; + nptr->stripl = 0; + } + + split(dp); + if (dp.key.empty()) goto error; + // key is affix string or 0 for null + if (dp.key != "0") { + nptr->appnd = data_buf.dup(iconv(dp.key)); + nptr->appndl = strlen(nptr->appnd); + } else { + nptr->appnd = ""; + nptr->appndl = 0; + } + + split(dp); + if (dp.key.empty()) goto error; + // key is the conditions descriptions + char * cond = iconv(dp.key); + int cond_len = normalize_cond_str(cond); + if (cond_len < 0) + return (make_err(invalid_cond, MsgConv(lang)(cond)) + .with_file(affix_file, dp.line_num)); + if (nptr->stripl != 0) { + char * cc = cond; + if (affix_type == 'S') cc += cond_len - nptr->stripl; + if (cond_len < nptr->stripl || + memcmp(cc, nptr->strip, nptr->stripl) != 0) + return (make_err(invalid_cond_strip, + MsgConv(lang)(cond), MsgConv(lang)(nptr->strip)) + .with_file(affix_file, dp.line_num)); + } + encodeit(conds_lookup, data_buf, nptr, cond); + + // now create SfxEntry or PfxEntry objects and use links to + // build an ordered (sorted by affix string) list + if (affix_type == 'P') + build_pfxlist(static_cast<PfxEntry *>(nptr)); + else + build_sfxlist(static_cast<SfxEntry *>(nptr)); + } + } + continue; + error: + return make_err(corrupt_affix, MsgConv(lang)(achar)).with_file(affix_file, dp.line_num); + error_count: + return make_err(corrupt_affix, MsgConv(lang)(achar), + _("Possibly incorrect count.")).with_file(affix_file, dp.line_num); + } + afflst.close(); + + // now we can speed up performance greatly taking advantage of the + // relationship between the affixes and the idea of "subsets". + + // View each prefix as a potential leading subset of another and view + // each suffix (reversed) as a potential trailing subset of another. + + // To illustrate this relationship if we know the prefix "ab" is + // found in the word to examine, only prefixes that "ab" is a + // leading subset of need be examined. Furthermore is "ab" is not + // present then none of the prefixes that "ab" is is a subset need + // be examined. + + // The same argument goes for suffix string that are reversed. + + // Then to top this off why not examine the first char of the word + // to quickly limit the set of prefixes to examine (i.e. the + // prefixes to examine must be leading supersets of the first + // character of the word (if they exist) + + // To take advantage of this "subset" relationship, we need to add + // two links from entry. One to take next if the current prefix + // is found (call it nexteq) and one to take next if the current + // prefix is not found (call it nextne). + + // Since we have built ordered lists, all that remains is to + // properly intialize the nextne and nexteq pointers that relate + // them + + process_pfx_order(); + process_sfx_order(); + + //CERR.printf("%u\n", data_buf.calc_size()/1024); + + return no_err; + +} + + +// we want to be able to quickly access prefix information +// both by prefix flag, and sorted by prefix string itself +// so we need to set up two indexes + +PosibErr<void> AffixMgr::build_pfxlist(PfxEntry* pfxptr) +{ + PfxEntry * ptr; + PfxEntry * ep = pfxptr; + + // get the right starting point + const char * key = ep->key(); + const byte flg = ep->flag(); + + // first index by flag which must exist + ptr = pFlag[flg]; + ep->flag_next = ptr; + pFlag[flg] = ep; + + // next insert the affix string, it will be sorted latter + + byte sp = *((const byte *)key); + ptr = pStart[sp]; + ep->next = ptr; + pStart[sp] = ep; + return no_err; +} + +// we want to be able to quickly access suffix information +// both by suffix flag, and sorted by the reverse of the +// suffix string itself; so we need to set up two indexes + +PosibErr<void> AffixMgr::build_sfxlist(SfxEntry* sfxptr) +{ + SfxEntry * ptr; + SfxEntry * ep = sfxptr; + char * tmp = (char *)data_buf.alloc(sfxptr->appndl + 1); + sfxptr->rappnd = tmp; + + // reverse the string + char * dest = tmp + sfxptr->appndl; + *dest-- = 0; + const char * src = sfxptr->appnd; + for (; dest >= tmp; --dest, ++src) + *dest = *src; + + /* get the right starting point */ + const char * key = ep->key(); + const byte flg = ep->flag(); + + // first index by flag which must exist + ptr = sFlag[flg]; + ep->flag_next = ptr; + sFlag[flg] = ep; + + // next insert the affix string, it will be sorted latter + + byte sp = *((const byte *)key); + ptr = sStart[sp]; + ep->next = ptr; + sStart[sp] = ep; + return no_err; +} + + + +// initialize the PfxEntry links NextEQ and NextNE to speed searching +PosibErr<void> AffixMgr::process_pfx_order() +{ + PfxEntry* ptr; + + // loop through each prefix list starting point + for (int i=1; i < SETSIZE; i++) { + + ptr = pStart[i]; + + if (ptr && ptr->next) + ptr = pStart[i] = sort(ptr, AffixLess<PfxEntry>()); + + // look through the remainder of the list + // and find next entry with affix that + // the current one is not a subset of + // mark that as destination for NextNE + // use next in list that you are a subset + // of as NextEQ + + for (; ptr != NULL; ptr = ptr->next) { + + PfxEntry * nptr = ptr->next; + for (; nptr != NULL; nptr = nptr->next) { + if (! isSubset( ptr->key() , nptr->key() )) break; + } + ptr->next_ne = nptr; + ptr->next_eq = NULL; + if ((ptr->next) && isSubset(ptr->key() , + (ptr->next)->key())) + ptr->next_eq = ptr->next; + } + + // now clean up by adding smart search termination strings + // if you are already a superset of the previous prefix + // but not a subset of the next, search can end here + // so set NextNE properly + + ptr = pStart[i]; + for (; ptr != NULL; ptr = ptr->next) { + PfxEntry * nptr = ptr->next; + PfxEntry * mptr = NULL; + for (; nptr != NULL; nptr = nptr->next) { + if (! isSubset(ptr->key(),nptr->key())) break; + mptr = nptr; + } + if (mptr) mptr->next_ne = NULL; + } + } + return no_err; +} + + + +// initialize the SfxEntry links NextEQ and NextNE to speed searching +PosibErr<void> AffixMgr::process_sfx_order() +{ + SfxEntry* ptr; + + // loop through each prefix list starting point + for (int i=1; i < SETSIZE; i++) { + + ptr = sStart[i]; + + if (ptr && ptr->next) + ptr = sStart[i] = sort(ptr, AffixLess<SfxEntry>()); + + // look through the remainder of the list + // and find next entry with affix that + // the current one is not a subset of + // mark that as destination for NextNE + // use next in list that you are a subset + // of as NextEQ + + for (; ptr != NULL; ptr = ptr->next) { + SfxEntry * nptr = ptr->next; + for (; nptr != NULL; nptr = nptr->next) { + if (! isSubset(ptr->key(),nptr->key())) break; + } + ptr->next_ne = nptr; + ptr->next_eq = NULL; + if ((ptr->next) && isSubset(ptr->key(),(ptr->next)->key())) + ptr->next_eq = ptr->next; + } + + + // now clean up by adding smart search termination strings: + // if you are already a superset of the previous suffix + // but not a subset of the next, search can end here + // so set NextNE properly + + ptr = sStart[i]; + for (; ptr != NULL; ptr = ptr->next) { + SfxEntry * nptr = ptr->next; + SfxEntry * mptr = NULL; + for (; nptr != NULL; nptr = nptr->next) { + if (! isSubset(ptr->key(),nptr->key())) break; + mptr = nptr; + } + if (mptr) mptr->next_ne = NULL; + } + } + return no_err; +} + +// takes aff file condition string and creates the +// conds array - please see the appendix at the end of the +// file affentry.cxx which describes what is going on here +// in much more detail + +static void encodeit(CondsLookup & l, ObjStack & buf, + AffEntry * ptr, char * cs) +{ + byte c; + int i, j, k; + + // see if we already have this conds matrix + + CondsLookup::iterator itr = l.find(cs); + if (!(itr == l.end())) { + ptr->conds = *itr; + return; + } + + Conds * cds = (Conds *)buf.alloc_bottom(sizeof(Conds)); + cds->str = buf.dup(cs); + l.insert(cds); + ptr->conds = cds; + + int nc = strlen(cs); + VARARRAYM(byte, mbr, nc + 1, MAXLNLEN); + + // now clear the conditions array + memset(cds->conds, 0, sizeof(cds->conds)); + + // now parse the string to create the conds array + + int neg = 0; // complement indicator + int grp = 0; // group indicator + int n = 0; // number of conditions + int ec = 0; // end condition indicator + int nm = 0; // number of member in group + + // if no condition just return + if (strcmp(cs,".")==0) { + cds->num = 0; + return; + } + + i = 0; + while (i < nc) { + c = *((byte *)(cs + i)); + + // start group indicator + if (c == '[') { + grp = 1; + c = 0; + } + + // complement flag + if ((grp == 1) && (c == '^')) { + neg = 1; + c = 0; + } + + // end goup indicator + if (c == ']') { + ec = 1; + c = 0; + } + + // add character of group to list + if ((grp == 1) && (c != 0)) { + *(mbr + nm) = c; + nm++; + c = 0; + } + + // end of condition + if (c != 0) { + ec = 1; + } + + + if (ec) { + if (grp == 1) { + if (neg == 0) { + // set the proper bits in the condition array vals for those chars + for (j=0;j<nm;j++) { + k = (unsigned int) mbr[j]; + cds->conds[k] = cds->conds[k] | (1 << n); + } + } else { + // complement so set all of them and then unset indicated ones + for (j=0;j<SETSIZE;j++) cds->conds[j] = cds->conds[j] | (1 << n); + for (j=0;j<nm;j++) { + k = (unsigned int) mbr[j]; + cds->conds[k] = cds->conds[k] & ~(1 << n); + } + } + neg = 0; + grp = 0; + nm = 0; + } else { + // not a group so just set the proper bit for this char + // but first handle special case of . inside condition + if (c == '.') { + // wild card character so set them all + for (j=0;j<SETSIZE;j++) cds->conds[j] = cds->conds[j] | (1 << n); + } else { + cds->conds[(unsigned int)c] = cds->conds[(unsigned int)c] | (1 << n); + } + } + n++; + ec = 0; + } + + + i++; + } + cds->num = n; + return; +} + + +// check word for prefixes +bool AffixMgr::prefix_check (const LookupInfo & linf, ParmString word, + CheckInfo & ci, GuessInfo * gi, bool cross) const +{ + + // first handle the special case of 0 length prefixes + PfxEntry * pe = pStart[0]; + while (pe) { + if (pe->check(linf,this,word,ci,gi)) return true; + pe = pe->next; + } + + // now handle the general case + byte sp = *reinterpret_cast<const byte *>(word.str()); + PfxEntry * pptr = pStart[sp]; + + while (pptr) { + if (isSubset(pptr->key(),word)) { + if (pptr->check(linf,this,word,ci,gi,cross)) return true; + pptr = pptr->next_eq; + } else { + pptr = pptr->next_ne; + } + } + + return false; +} + + +// check word for suffixes +bool AffixMgr::suffix_check (const LookupInfo & linf, ParmString word, + CheckInfo & ci, GuessInfo * gi, + int sfxopts, AffEntry * ppfx) const +{ + + // first handle the special case of 0 length suffixes + SfxEntry * se = sStart[0]; + while (se) { + if (se->check(linf, word, ci, gi, sfxopts, ppfx)) return true; + se = se->next; + } + + // now handle the general case + byte sp = *((const byte *)(word + word.size() - 1)); + SfxEntry * sptr = sStart[sp]; + + while (sptr) { + if (isRevSubset(sptr->key(), word + word.size() - 1, word.size())) { + if (sptr->check(linf, word, ci, gi, sfxopts, ppfx)) return true; + sptr = sptr->next_eq; + } else { + sptr = sptr->next_ne; + } + } + + return false; +} + +// check if word with affixes is correctly spelled +bool AffixMgr::affix_check(const LookupInfo & linf, ParmString word, + CheckInfo & ci, GuessInfo * gi) const +{ + // Deal With Case in a semi-intelligent manner + CasePattern cp = lang->LangImpl::case_pattern(word); + ParmString pword = word; + ParmString sword = word; + CharVector lower; + if (cp == FirstUpper) { + lower.append(word, word.size() + 1); + lower[0] = lang->to_lower(word[0]); + pword = ParmString(lower.data(), lower.size() - 1); + } else if (cp == AllUpper) { + lower.resize(word.size() + 1); + unsigned int i = 0; + for (; i != word.size(); ++i) + lower[i] = lang->to_lower(word[i]); + lower[i] = '\0'; + pword = ParmString(lower.data(), lower.size() - 1); + sword = pword; + } + + // check all prefixes (also crossed with suffixes if allowed) + if (prefix_check(linf, pword, ci, gi)) return true; + + // if still not found check all suffixes + if (suffix_check(linf, sword, ci, gi, 0, NULL)) return true; + + // if still not found check again but with the lower case version + // which can make a difference if the entire word matches the cond + // string + if (cp == FirstUpper) { + return suffix_check(linf, pword, ci, gi, 0, NULL); + } else { + return false; + } +} + +void AffixMgr::munch(ParmString word, GuessInfo * gi, bool cross) const +{ + LookupInfo li(0, LookupInfo::AlwaysTrue); + CheckInfo ci; + gi->reset(); + CasePattern cp = lang->LangImpl::case_pattern(word); + if (cp == AllUpper) return; + if (cp != FirstUpper) + prefix_check(li, word, ci, gi, cross); + suffix_check(li, word, ci, gi, 0, NULL); +} + +WordAff * AffixMgr::expand(ParmString word, ParmString aff, + ObjStack & buf, int limit) const +{ + byte * empty = (byte *)buf.alloc(1); + *empty = 0; + + byte * suf = (byte *)buf.alloc(aff.size() + 1); + byte * suf_e = suf; + byte * csuf = (byte *)buf.alloc(aff.size() + 1); + byte * csuf_e = csuf; + + WordAff * head = (WordAff *)buf.alloc_bottom(sizeof(WordAff)); + WordAff * cur = head; + cur->word = buf.dup(word); + cur->aff = suf; + + for (const byte * c = (const byte *)aff.str(), * end = c + aff.size(); + c != end; + ++c) + { + if (sFlag[*c]) *suf_e++ = *c; + if (sFlag[*c] && sFlag[*c]->allow_cross()) *csuf_e++ = *c; + + for (PfxEntry * p = pFlag[*c]; p; p = p->flag_next) { + SimpleString newword = p->add(word, buf); + if (!newword) continue; + cur->next = (WordAff *)buf.alloc_bottom(sizeof(WordAff)); + cur = cur->next; + cur->word = newword; + cur->aff = p->allow_cross() ? csuf : empty; + } + } + + *suf_e = 0; + *csuf_e = 0; + cur->next = 0; + + if (limit == 0) return head; + + WordAff * * end = &cur->next; + WordAff * * very_end = end; + size_t nsuf_s = suf_e - suf + 1; + + for (WordAff * * cur = &head; cur != end; cur = &(*cur)->next) { + if ((int)(*cur)->word.size - max_strip_ >= limit) continue; + byte * nsuf = (byte *)buf.alloc(nsuf_s); + expand_suffix((*cur)->word, (*cur)->aff, buf, limit, nsuf, &very_end, word); + (*cur)->aff = nsuf; + } + + return head; +} + +WordAff * AffixMgr::expand_suffix(ParmString word, const byte * aff, + ObjStack & buf, int limit, + byte * new_aff, WordAff * * * l, + ParmString orig_word) const +{ + WordAff * head = 0; + if (l) head = **l; + WordAff * * cur = l ? *l : &head; + bool expanded = false; + bool not_expanded = false; + if (!orig_word) orig_word = word; + + while (*aff) { + if ((int)word.size() - max_strip_f[*aff] < limit) { + for (SfxEntry * p = sFlag[*aff]; p; p = p->flag_next) { + SimpleString newword = p->add(word, buf, limit, orig_word); + if (!newword) continue; + if (newword == EMPTY) {not_expanded = true; continue;} + *cur = (WordAff *)buf.alloc_bottom(sizeof(WordAff)); + (*cur)->word = newword; + (*cur)->aff = (const byte *)EMPTY; + cur = &(*cur)->next; + expanded = true; + } + } + if (new_aff && (!expanded || not_expanded)) *new_aff++ = *aff; + ++aff; + } + *cur = 0; + if (new_aff) *new_aff = 0; + if (l) *l = cur; + return head; +} + +CheckAffixRes AffixMgr::check_affix(ParmString word, char aff) const +{ + CheckAffixRes res = InvalidAffix; + + for (PfxEntry * p = pFlag[(unsigned char)aff]; p; p = p->flag_next) { + res = InapplicableAffix; + if (p->applicable(word)) return ValidAffix; + } + + for (SfxEntry * p = sFlag[(unsigned char)aff]; p; p = p->flag_next) { + if (res == InvalidAffix) res = InapplicableAffix; + if (p->applicable(word)) return ValidAffix; + } + + return res; +} + + + +////////////////////////////////////////////////////////////////////// +// +// LookupInfo +// + +int LookupInfo::lookup (ParmString word, const SensitiveCompare * c, + char achar, + WordEntry & o, GuessInfo * gi) const +{ + SpellerImpl::WS::const_iterator i = begin; + const char * g = 0; + if (mode == Word) { + do { + (*i)->lookup(word, c, o); + for (;!o.at_end(); o.adv()) { + if (TESTAFF(o.aff, achar)) + return 1; + else + g = o.word; + } + ++i; + } while (i != end); + } else if (mode == Clean) { + do { + (*i)->clean_lookup(word, o); + for (;!o.at_end(); o.adv()) { + if (TESTAFF(o.aff, achar)) + return 1; + else + g = o.word; + } + ++i; + } while (i != end); + } else if (gi) { + g = gi->dup(word); + } + if (gi && g) { + CheckInfo * ci = gi->add(); + ci->word = g; + return -1; + } + return 0; +} + +////////////////////////////////////////////////////////////////////// +// +// Affix Entry +// + +bool PfxEntry::applicable(SimpleString word) const +{ + unsigned int cond; + /* make sure all conditions match */ + if ((word.size > stripl) && (word.size >= conds->num)) { + const byte * cp = (const byte *) word.str; + for (cond = 0; cond < conds->num; cond++) { + if ((conds->get(*cp++) & (1 << cond)) == 0) + break; + } + if (cond >= conds->num) return true; + } + return false; +} + +// add prefix to this word assuming conditions hold +SimpleString PfxEntry::add(SimpleString word, ObjStack & buf) const +{ + unsigned int cond; + /* make sure all conditions match */ + if ((word.size > stripl) && (word.size >= conds->num)) { + const byte * cp = (const byte *) word.str; + for (cond = 0; cond < conds->num; cond++) { + if ((conds->get(*cp++) & (1 << cond)) == 0) + break; + } + if (cond >= conds->num) { + /* */ + int alen = word.size - stripl; + char * newword = (char *)buf.alloc(alen + appndl + 1); + if (appndl) memcpy(newword, appnd, appndl); + memcpy(newword + appndl, word + stripl, alen + 1); + return SimpleString(newword, alen + appndl); + } + } + return SimpleString(); +} + +// check if this prefix entry matches +bool PfxEntry::check(const LookupInfo & linf, const AffixMgr * pmyMgr, + ParmString word, + CheckInfo & ci, GuessInfo * gi, bool cross) const +{ + unsigned int cond; // condition number being examined + unsigned tmpl; // length of tmpword + WordEntry wordinfo; // hash entry of root word or NULL + byte * cp; + VARARRAYM(char, tmpword, word.size()+stripl+1, MAXWORDLEN+1); + + // on entry prefix is 0 length or already matches the beginning of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it + + tmpl = word.size() - appndl; + + if ((tmpl > 0) && (tmpl + stripl >= conds->num)) { + + // generate new root word by removing prefix and adding + // back any characters that would have been stripped + + if (stripl) strcpy (tmpword, strip); + strcpy ((tmpword + stripl), (word + appndl)); + + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested + + cp = (byte *)tmpword; + for (cond = 0; cond < conds->num; cond++) { + if ((conds->get(*cp++) & (1 << cond)) == 0) break; + } + + // if all conditions are met then check if resulting + // root word in the dictionary + + if (cond >= conds->num) { + CheckInfo * lci = 0; + CheckInfo * guess = 0; + tmpl += stripl; + + int res = linf.lookup(tmpword, &linf.sp->s_cmp_end, achar, wordinfo, gi); + + if (res == 1) { + + lci = &ci; + lci->word = wordinfo.word; + goto quit; + + } else if (res == -1) { + + guess = gi->head; + + } + + // prefix matched but no root word was found + // if XPRODUCT is allowed, try again but now + // cross checked combined with a suffix + + if (gi) + lci = gi->head; + + if (cross && xpflg & XPRODUCT) { + if (pmyMgr->suffix_check(linf, ParmString(tmpword, tmpl), + ci, gi, + XPRODUCT, (AffEntry *)this)) { + lci = &ci; + + } else if (gi) { + + CheckInfo * stop = lci; + for (lci = gi->head; + lci != stop; + lci = const_cast<CheckInfo *>(lci->next)) + { + lci->pre_flag = achar; + lci->pre_strip_len = stripl; + lci->pre_add_len = appndl; + lci->pre_add = appnd; + } + + } else { + + lci = 0; + + } + } + + if (guess) + lci = guess; + + quit: + if (lci) { + lci->pre_flag = achar; + lci->pre_strip_len = stripl; + lci->pre_add_len = appndl; + lci->pre_add = appnd; + } + if (lci == &ci) return true; + } + } + return false; +} + +bool SfxEntry::applicable(SimpleString word) const +{ + int cond; + /* make sure all conditions match */ + if ((word.size > stripl) && (word.size >= conds->num)) { + const byte * cp = (const byte *) (word + word.size); + for (cond = conds->num; --cond >=0; ) { + if ((conds->get(*--cp) & (1 << cond)) == 0) + break; + } + if (cond < 0) return true; + } + return false; +} + +// add suffix to this word assuming conditions hold +SimpleString SfxEntry::add(SimpleString word, ObjStack & buf, + int limit, SimpleString orig_word) const +{ + int cond; + /* make sure all conditions match */ + if ((orig_word.size > stripl) && (orig_word.size >= conds->num)) { + const byte * cp = (const byte *) (orig_word + orig_word.size); + for (cond = conds->num; --cond >=0; ) { + if ((conds->get(*--cp) & (1 << cond)) == 0) + break; + } + if (cond < 0) { + int alen = word.size - stripl; + if (alen >= limit) return EMPTY; + /* we have a match so add suffix */ + char * newword = (char *)buf.alloc(alen + appndl + 1); + memcpy(newword, word, alen); + memcpy(newword + alen, appnd, appndl + 1); + return SimpleString(newword, alen + appndl); + } + } + return SimpleString(); +} + +// see if this suffix is present in the word +bool SfxEntry::check(const LookupInfo & linf, ParmString word, + CheckInfo & ci, GuessInfo * gi, + int optflags, AffEntry* ppfx) +{ + unsigned tmpl; // length of tmpword + int cond; // condition beng examined + WordEntry wordinfo; // hash entry pointer + byte * cp; + VARARRAYM(char, tmpword, word.size()+stripl+1, MAXWORDLEN+1); + PfxEntry* ep = (PfxEntry *) ppfx; + + // if this suffix is being cross checked with a prefix + // but it does not support cross products skip it + + if ((optflags & XPRODUCT) != 0 && (xpflg & XPRODUCT) == 0) + return false; + + // upon entry suffix is 0 length or already matches the end of the word. + // So if the remaining root word has positive length + // and if there are enough chars in root word and added back strip chars + // to meet the number of characters conditions, then test it + + tmpl = word.size() - appndl; + + if ((tmpl > 0) && (tmpl + stripl >= conds->num)) { + + // generate new root word by removing suffix and adding + // back any characters that would have been stripped or + // or null terminating the shorter string + + strcpy (tmpword, word); + cp = (byte *)(tmpword + tmpl); + if (stripl) { + strcpy ((char *)cp, strip); + tmpl += stripl; + cp = (byte *)(tmpword + tmpl); + } else *cp = '\0'; + + // now make sure all of the conditions on characters + // are met. Please see the appendix at the end of + // this file for more info on exactly what is being + // tested + + for (cond = conds->num; --cond >= 0; ) { + if ((conds->get(*--cp) & (1 << cond)) == 0) break; + } + + // if all conditions are met then check if resulting + // root word in the dictionary + + if (cond < 0) { + CheckInfo * lci = 0; + tmpl += stripl; + const SensitiveCompare * cmp = + optflags & XPRODUCT ? &linf.sp->s_cmp_middle : &linf.sp->s_cmp_begin; + int res = linf.lookup(tmpword, cmp, achar, wordinfo, gi); + if (res == 1 + && ((optflags & XPRODUCT) == 0 || TESTAFF(wordinfo.aff, ep->achar))) + { + lci = &ci; + lci->word = wordinfo.word; + } else if (res == 1 && gi) { + lci = gi->add(); + lci->word = wordinfo.word; + } else if (res == -1) { // gi must be defined + lci = gi->head; + } + + if (lci) { + lci->suf_flag = achar; + lci->suf_strip_len = stripl; + lci->suf_add_len = appndl; + lci->suf_add = appnd; + } + + if (lci == &ci) return true; + } + } + return false; +} + +////////////////////////////////////////////////////////////////////// +// +// new_affix_mgr +// + + +PosibErr<AffixMgr *> new_affix_mgr(ParmString name, + Conv & iconv, + const Language * lang) +{ + if (name == "none") + return 0; + //CERR << "NEW AFFIX MGR\n"; + String file; + file += lang->data_dir(); + file += '/'; + file += lang->name(); + file += "_affix.dat"; + AffixMgr * affix; + affix = new AffixMgr(lang); + PosibErrBase pe = affix->setup(file, iconv); + if (pe.has_err()) { + delete affix; + return pe; + } else { + return affix; + } +} +} + +/************************************************************************** + +Appendix: Understanding Affix Code + + +An affix is either a prefix or a suffix attached to root words to make +other words. + +Basically a Prefix or a Suffix is set of AffEntry objects +which store information about the prefix or suffix along +with supporting routines to check if a word has a particular +prefix or suffix or a combination. + +The structure affentry is defined as follows: + +struct AffEntry +{ + unsigned char achar; // char used to represent the affix + char * strip; // string to strip before adding affix + char * appnd; // the affix string to add + short stripl; // length of the strip string + short appndl; // length of the affix string + short numconds; // the number of conditions that must be met + short xpflg; // flag: XPRODUCT- combine both prefix and suffix + char conds[SETSIZE]; // array which encodes the conditions to be met +}; + + +Here is a suffix borrowed from the en_US.aff file. This file +is whitespace delimited. + +SFX D Y 4 +SFX D 0 e d +SFX D y ied [^aeiou]y +SFX D 0 ed [^ey] +SFX D 0 ed [aeiou]y + +This information can be interpreted as follows: + +In the first line has 4 fields + +Field +----- +1 SFX - indicates this is a suffix +2 D - is the name of the character flag which represents this suffix +3 Y - indicates it can be combined with prefixes (cross product) +4 4 - indicates that sequence of 4 affentry structures are needed to + properly store the affix information + +The remaining lines describe the unique information for the 4 SfxEntry +objects that make up this affix. Each line can be interpreted +as follows: (note fields 1 and 2 are as a check against line 1 info) + +Field +----- +1 SFX - indicates this is a suffix +2 D - is the name of the character flag for this affix +3 y - the string of chars to strip off before adding affix + (a 0 here indicates the NULL string) +4 ied - the string of affix characters to add +5 [^aeiou]y - the conditions which must be met before the affix + can be applied + +Field 5 is interesting. Since this is a suffix, field 5 tells us that +there are 2 conditions that must be met. The first condition is that +the next to the last character in the word must *NOT* be any of the +following "a", "e", "i", "o" or "u". The second condition is that +the last character of the word must end in "y". + +So how can we encode this information concisely and be able to +test for both conditions in a fast manner? The answer is found +but studying the wonderful ispell code of Geoff Kuenning, et.al. +(now available under a normal BSD license). + +If we set up a conds array of 256 bytes indexed (0 to 255) and access it +using a character (cast to an unsigned char) of a string, we have 8 bits +of information we can store about that character. Specifically we +could use each bit to say if that character is allowed in any of the +last (or first for prefixes) 8 characters of the word. + +Basically, each character at one end of the word (up to the number +of conditions) is used to index into the conds array and the resulting +value found there says whether the that character is valid for a +specific character position in the word. + +For prefixes, it does this by setting bit 0 if that char is valid +in the first position, bit 1 if valid in the second position, and so on. + +If a bit is not set, then that char is not valid for that postion in the +word. + +If working with suffixes bit 0 is used for the character closest +to the front, bit 1 for the next character towards the end, ..., +with bit numconds-1 representing the last char at the end of the string. + +Note: since entries in the conds[] are 8 bits, only 8 conditions +(read that only 8 character positions) can be examined at one +end of a word (the beginning for prefixes and the end for suffixes. + +So to make this clearer, lets encode the conds array values for the +first two affentries for the suffix D described earlier. + + + For the first affentry: + numconds = 1 (only examine the last character) + + conds['e'] = (1 << 0) (the word must end in an E) + all others are all 0 + + For the second affentry: + numconds = 2 (only examine the last two characters) + + conds[X] = conds[X] | (1 << 0) (aeiou are not allowed) + where X is all characters *but* a, e, i, o, or u + + + conds['y'] = (1 << 1) (the last char must be a y) + all other bits for all other entries in the conds array are zero + + +**************************************************************************/ diff --git a/jni/modules/speller/default/affix.hpp b/jni/modules/speller/default/affix.hpp new file mode 100644 index 0000000..5a6f50a --- /dev/null +++ b/jni/modules/speller/default/affix.hpp @@ -0,0 +1,130 @@ +// This file is part of The New Aspell +// Copyright (C) 2004 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. +// +// Copyright 2002 Kevin B. Hendricks, Stratford, Ontario, Canada And +// Contributors. All rights reserved. +// + +#ifndef ASPELL_AFFIX__HPP +#define ASPELL_AFFIX__HPP + +#include "posib_err.hpp" +#include "wordinfo.hpp" +#include "fstream.hpp" +#include "parm_string.hpp" +#include "simple_string.hpp" +#include "char_vector.hpp" +#include "objstack.hpp" + +#define SETSIZE 256 +#define MAXAFFIXES 256 +#define MAXWORDLEN 255 +#define XPRODUCT (1 << 0) + +#define MAXLNLEN 1024 + +#define TESTAFF( a , b) strchr(a, b) + +namespace acommon { + class Config; + struct CheckInfo; + struct Conv; +} + +namespace aspeller { + + using namespace acommon; + + class Language; + + class SpellerImpl; + using acommon::CheckInfo; + struct GuessInfo; + + struct LookupInfo; + struct AffEntry; + struct PfxEntry; + struct SfxEntry; + + struct WordAff + { + SimpleString word; + const unsigned char * aff; + WordAff * next; + }; + + enum CheckAffixRes {InvalidAffix, InapplicableAffix, ValidAffix}; + + class AffixMgr + { + const Language * lang; + + PfxEntry * pStart[SETSIZE]; + SfxEntry * sStart[SETSIZE]; + PfxEntry * pFlag[SETSIZE]; + SfxEntry * sFlag[SETSIZE]; + + int max_strip_f[SETSIZE]; + int max_strip_; + + const char * encoding; + //const char * compound; + //int cpdmin; + + ObjStack data_buf; + + const char * affix_file; + + public: + + AffixMgr(const Language * l); + ~AffixMgr(); + + unsigned int max_strip() const {return max_strip_;} + + PosibErr<void> setup(ParmString affpath, Conv &); + + bool affix_check(const LookupInfo &, ParmString, CheckInfo &, GuessInfo *) const; + bool prefix_check(const LookupInfo &, ParmString, CheckInfo &, GuessInfo *, + bool cross = true) const; + bool suffix_check(const LookupInfo &, ParmString, CheckInfo &, GuessInfo *, + int sfxopts, AffEntry* ppfx) const; + + void munch(ParmString word, GuessInfo *, bool cross = true) const; + + // None of the expand methods reset the objstack + + WordAff * expand(ParmString word, ParmString aff, + ObjStack &, int limit = INT_MAX) const; + + CheckAffixRes check_affix(ParmString word, char aff) const; + + WordAff * expand_prefix(ParmString word, ParmString aff, + ObjStack & buf) const + { + return expand(word,aff,buf,0); + } + WordAff * expand_suffix(ParmString word, const unsigned char * aff, + ObjStack &, int limit = INT_MAX, + unsigned char * new_aff = 0, WordAff * * * l = 0, + ParmString orig_word = 0) const; + + private: + PosibErr<void> parse_file(const char * affpath, Conv &); + + PosibErr<void> build_pfxlist(PfxEntry* pfxptr); + PosibErr<void> build_sfxlist(SfxEntry* sfxptr); + PosibErr<void> process_pfx_order(); + PosibErr<void> process_sfx_order(); + }; + + PosibErr<AffixMgr *> new_affix_mgr(ParmString name, + Conv &, + const Language * lang); +} + +#endif + diff --git a/jni/modules/speller/default/affix.lo b/jni/modules/speller/default/affix.lo new file mode 100644 index 0000000..f593110 --- /dev/null +++ b/jni/modules/speller/default/affix.lo @@ -0,0 +1,12 @@ +# modules/speller/default/affix.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/affix.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/asuggest.hpp b/jni/modules/speller/default/asuggest.hpp new file mode 100644 index 0000000..bdb24ea --- /dev/null +++ b/jni/modules/speller/default/asuggest.hpp @@ -0,0 +1,58 @@ +// Copyright 2000 by Kevin Atkinson under the terms of the LGPL + +#ifndef _asuggest_hh_ +#define _asuggest_hh_ + +#include "suggest.hpp" +#include "editdist.hpp" +#include "typo_editdist.hpp" +#include "cache.hpp" + +namespace aspeller { + class Speller; + class SpellerImpl; + class Suggest; + + struct SuggestParms { + // implementation at the end of suggest.cc + + EditDistanceWeights edit_distance_weights; + CachePtr<const TypoEditDistanceInfo> ti; + + bool try_one_edit_word, try_scan_1, try_scan_2, try_ngram; + + int ngram_threshold, ngram_keep; + + bool check_after_one_edit_word; + + bool use_typo_analysis; + bool use_repl_table; + + int normal_soundslike_weight; // percentage + + int small_word_soundslike_weight; + int small_word_threshold; + + int soundslike_weight; + int word_weight; + + int skip; + int span; + int limit; + + String split_chars; + + SuggestParms() {} + + PosibErr<void> set(ParmString mode, SpellerImpl * sp); + PosibErr<void> fill_distance_lookup(const Config * c, const Language & l); + + virtual ~SuggestParms() {} + virtual SuggestParms * clone() const; + virtual void set_original_word_size(int size); + }; + + Suggest * new_default_suggest(const Speller *, const SuggestParms &); +} + +#endif diff --git a/jni/modules/speller/default/block_vector.hpp b/jni/modules/speller/default/block_vector.hpp new file mode 100644 index 0000000..cbeabe5 --- /dev/null +++ b/jni/modules/speller/default/block_vector.hpp @@ -0,0 +1,54 @@ +// Copyright (c) 2000 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef __autil_block_vector__ +#define __autil_block_vector__ + +#include <stddef.h> +//#include <iterator> + +namespace aspeller { + + template <typename T> + class BlockVector { + T * begin_; + T * end_; + public: + typedef T value_type; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + typedef T * iterator; + typedef T * const_iterator; + typedef T & reference; + typedef const T & const_reference; + typedef T * pointer; + typedef T * const_pointer; + //typedef std::random_access_iterator_tag iterator_category; + typedef ptrdiff_t distance_type; + + BlockVector() : begin_(0), end_(0) {} + BlockVector(size_type) : begin_(0), end_(0) {} // noop + BlockVector(T * b, T * e) : begin_(b), end_(e) {} + void set(T * b, T * e) {begin_ = b; end_ = e;} + iterator begin() {return begin_;} + iterator end() {return end_;} + const_iterator begin() const {return begin_;} + const_iterator end() const {return end_;} + size_type size() const {return end_ - begin_;} + bool empty() const {return begin_ != end_;} + reference operator[](size_type i) {return *(begin_ + i);} + const_reference operator[](size_type i) const {return *(begin_ + i);} + }; + +} + +#endif diff --git a/jni/modules/speller/default/check_list.hpp b/jni/modules/speller/default/check_list.hpp new file mode 100644 index 0000000..89ddb03 --- /dev/null +++ b/jni/modules/speller/default/check_list.hpp @@ -0,0 +1,47 @@ +// This file is part of The New Aspell +// Copyright (C) 2004 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +#ifndef __aspeller_check_list__ +#define __aspeller_check_list__ + +#include "objstack.hpp" +#include "speller.hpp" + +namespace aspeller { + + using acommon::CheckInfo; + + static inline void clear_check_info(CheckInfo & ci) + { + memset(&ci, 0, sizeof(ci)); + } + + struct GuessInfo + { + int num; + CheckInfo * head; + GuessInfo() : num(0), head(0) {} + void reset() { buf.reset(); num = 0; head = 0; } + CheckInfo * add() { + num++; + CheckInfo * tmp = (CheckInfo *)buf.alloc_top(sizeof(CheckInfo), + sizeof(void*)); + clear_check_info(*tmp); + tmp->next = head; + head = tmp; + head->guess = true; + return head; + } + void * alloc(unsigned s) {return buf.alloc_bottom(s);} + char * dup(ParmString str) {return buf.dup(str);} + private: + ObjStack buf; + }; + + +} + +#endif diff --git a/jni/modules/speller/default/data.cpp b/jni/modules/speller/default/data.cpp new file mode 100644 index 0000000..4be5b53 --- /dev/null +++ b/jni/modules/speller/default/data.cpp @@ -0,0 +1,468 @@ +// This file is part of The New Aspell +// Copyright (C) 2000-2001,2011 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +#include "config.hpp" +#include "convert.hpp" +#include "data.hpp" +#include "data_id.hpp" +#include "errors.hpp" +#include "file_util.hpp" +#include "fstream.hpp" +#include "language.hpp" +#include "speller_impl.hpp" +#include "cache-t.hpp" +#include "vararray.hpp" + +#include "gettext.h" + +namespace aspeller { + + GlobalCache<Dictionary> dict_cache("dictionary"); + + // + // Dict impl + // + + Dictionary::Id::Id(Dict * p, const FileName & fn) + : ptr(p) + { + file_name = fn.name; +#ifdef USE_FILE_INO + struct stat s; + // the file ,i + if (file_name[0] != '\0' && stat(fn.path.c_str(), &s) == 0) { + ino = s.st_ino; + dev = s.st_dev; + } else { + ino = 0; + dev = 0; + } +#endif + } + + bool operator==(const Dictionary::Id & rhs, const Dictionary::Id & lhs) + { + if (rhs.ptr == 0 || lhs.ptr == 0) { + if (rhs.file_name == 0 || lhs.file_name == 0) + return false; +#ifdef USE_FILE_INO + return rhs.ino == lhs.ino && rhs.dev == lhs.dev; +#else + return strcmp(rhs.file_name, lhs.file_name) == 0; +#endif + } else { + return rhs.ptr == lhs.ptr; + } + } + + PosibErr<void> Dictionary::attach(const Language &l) { + if (lang_ && strcmp(l.name(),lang_->name()) != 0) + return make_err(mismatched_language, lang_->name(), l.name()); + if (!lang_) lang_.copy(&l); + copy(); + return no_err; + } + + Dictionary::Dictionary(BasicType t, const char * n) + : Cacheable(&dict_cache), lang_(), id_(), + basic_type(t), class_name(n), + affix_compressed(false), + invisible_soundslike(false), soundslike_root_only(false), + fast_scan(false), fast_lookup(false) + { + id_.reset(new Id(this)); + } + + Dictionary::~Dictionary() + { + } + + const char * Dictionary::lang_name() const { + return lang_->name(); + } + + PosibErr<void> Dictionary::check_lang(ParmString l) { + if (l != lang_->name()) + return make_err(mismatched_language, lang_->name(), l); + return no_err; + } + + PosibErr<void> Dictionary::set_check_lang (ParmString l, Config & config) + { + if (lang_ == 0) { + PosibErr<Language *> res = new_language(config, l); + if (res.has_err()) return res; + lang_.reset(res.data); + lang_->set_lang_defaults(config); + set_lang_hook(config); + } else { + if (l != lang_->name()) + return make_err(mismatched_language, l, lang_->name()); + } + return no_err; + } + + void Dictionary::FileName::copy(const FileName & other) + { + const_cast<String & >(path) = other.path; + const_cast<const char * &>(name) = path.c_str() + (other.name - other.path.c_str()); + } + + void Dictionary::FileName::clear() + { + path = ""; + name = path.c_str(); + } + + void Dictionary::FileName::set(ParmString str) + { + path = str; + int i = path.size() - 1; + while (i >= 0) { + if (path[i] == '/' || path[i] == '\\') { + ++i; + break; + } + --i; + } + name = path.c_str() + i; + } + + PosibErr<void> Dictionary::set_file_name(ParmString fn) + { + file_name_.set(fn); + *id_ = Id(this, file_name_); + return no_err; + } + + PosibErr<void> Dictionary::update_file_info(FStream & f) + { +#ifdef USE_FILE_INO + struct stat s; + int ok = fstat(f.file_no(), &s); + assert(ok == 0); + id_->ino = s.st_ino; + id_->dev = s.st_dev; +#endif + return no_err; + } + + // + // BasicDict + // + + class DictStringEnumeration : public StringEnumeration + { + ClonePtr<Dict::Enum> real_; + public: + DictStringEnumeration(Dict::Enum * r) : real_(r) {} + + bool at_end() const { + return real_->at_end(); + } + const char * next() { + // FIXME: It's not this simple when affixes are involved + WordEntry * w = real_->next(); + if (!w) return 0; + return w->word; + } + StringEnumeration * clone() const { + return new DictStringEnumeration(*this); + } + void assign(const StringEnumeration * other) { + *this = *static_cast<const DictStringEnumeration *>(other); + } + }; + + PosibErr<void> Dictionary::add_repl(ParmString mis, ParmString cor) + { + if (!invisible_soundslike) { + VARARRAY(char, sl, mis.size() + 1); + lang()->LangImpl::to_soundslike(sl, mis.str(), mis.size()); + return add_repl(mis, cor, sl); + } else { + return add_repl(mis, cor, ""); + } + } + + PosibErr<void> Dictionary::add(ParmString w) + { + if (!invisible_soundslike) { + VARARRAY(char, sl, w.size() + 1); + lang()->LangImpl::to_soundslike(sl, w.str(), w.size()); + return add(w, sl); + } else { + return add(w, ""); + } + } + + // + // Default implementation; + // + + PosibErr<void> Dictionary::load(ParmString, Config &, + DictList *, SpellerImpl *) + { + return make_err(unimplemented_method, "load", class_name); + } + + PosibErr<void> Dictionary::merge(ParmString) + { + return make_err(unimplemented_method, "load", class_name); + } + + PosibErr<void> Dictionary::synchronize() + { + return make_err(unimplemented_method, "synchronize", class_name); + } + + PosibErr<void> Dictionary::save_noupdate() + { + return make_err(unimplemented_method, "save_noupdate", class_name); + } + + PosibErr<void> Dictionary::save_as(ParmString) + { + return make_err(unimplemented_method, "save_as", class_name); + } + + PosibErr<void> Dictionary::clear() + { + return make_err(unimplemented_method, "clear", class_name); + } + + StringEnumeration * Dictionary::elements() const + { + Enum * e = detailed_elements(); + if (!e) return 0; + return new DictStringEnumeration(e); + } + + Dict::Enum * Dictionary::detailed_elements() const + { + return 0; + } + + Dict::Size Dictionary::size() const + { + if (empty()) return 0; + else return 1; + } + + bool Dictionary::empty() const + { + return false; + } + + bool Dictionary::lookup (ParmString word, const SensitiveCompare *, + WordEntry &) const + { + return false; + } + + bool Dictionary::clean_lookup(ParmString, WordEntry &) const + { + return false; + } + + bool Dictionary::soundslike_lookup(const WordEntry &, WordEntry &) const + { + return false; + } + + bool Dictionary::soundslike_lookup(ParmString, WordEntry &) const + { + return false; + } + + SoundslikeEnumeration * Dictionary::soundslike_elements() const + { + return 0; + } + + PosibErr<void> Dictionary::add(ParmString w, ParmString s) + { + return make_err(unimplemented_method, "add", class_name); + } + + PosibErr<void> Dictionary::remove(ParmString w) + { + return make_err(unimplemented_method, "remove", class_name); + } + + bool Dictionary::repl_lookup(const WordEntry &, WordEntry &) const + { + return false; + } + + bool Dictionary::repl_lookup(ParmString, WordEntry &) const + { + return false; + } + + PosibErr<void> Dictionary::add_repl(ParmString mis, ParmString cor, ParmString s) + { + return make_err(unimplemented_method, "add_repl", class_name); + } + + PosibErr<void> Dictionary::remove_repl(ParmString mis, ParmString cor) + { + return make_err(unimplemented_method, "remove_repl", class_name); + } + + DictsEnumeration * Dictionary::dictionaries() const + { + return 0; + } + +#define write_conv(s) do { \ + if (!c) {o << s;} \ + else {ParmString ss(s); buf.clear(); c->convert(ss.str(), ss.size(), buf); o.write(buf.data(), buf.size());} \ + } while (false) + + OStream & WordEntry::write (OStream & o, + const Language & l, + Convert * c) const + { + CharVector buf; + write_conv(word); + if (aff && *aff) { + o << '/'; + write_conv(aff); + } + return o; + } + + PosibErr<Dict *> add_data_set(ParmString fn, + Config & config, + DictList * new_dicts, + SpellerImpl * speller, + ParmString dir, + DataType allowed) + { + Dict * res = 0; + static const char * suffix_list[] = {"", ".multi", ".alias", + ".spcl", ".special", + ".pws", ".prepl"}; + FStream in; + const char * * suffix; + const char * * suffix_end + = suffix_list + sizeof(suffix_list)/sizeof(const char *); + String dict_dir = config.retrieve("dict-dir"); + String true_file_name; + Dict::FileName file_name(fn); + const char * d = dir; + do { + if (d == 0) d = dict_dir.c_str(); + suffix = suffix_list; + do { + true_file_name = add_possible_dir(d, ParmString(file_name.path) + + ParmString(*suffix)); + in.open(true_file_name, "r").ignore_err(); + ++suffix; + } while (!in && suffix != suffix_end); + if (d == dict_dir.c_str()) break; + d = 0; + } while (!in); + if (!in) { + true_file_name = add_possible_dir(dir ? dir.str() : d, file_name.path); + return make_err(cant_read_file, true_file_name); + } + DataType actual_type; + if ((true_file_name.size() > 5 + && true_file_name.substr(true_file_name.size() - 6, 6) == ".spcl") + || + (true_file_name.size() > 6 + && (true_file_name.substr(true_file_name.size() - 6, 6) == ".multi" + || true_file_name.substr(true_file_name.size() - 6, 6) == ".alias")) + || + (true_file_name.size() > 8 + && true_file_name.substr(true_file_name.size() - 6, 6) == ".special")) + { + + actual_type = DT_Multi; + + } else { + + char head[32] = {0}; + in.read(head, 32); + if (strncmp(head, "aspell default speller rowl", 27) ==0) + actual_type = DT_ReadOnly; + else if (strncmp(head, "personal_repl", 13) == 0) + actual_type = DT_WritableRepl; + else if (strncmp(head, "personal_ws", 11) == 0) + actual_type = DT_Writable; + else + return make_err(bad_file_format, true_file_name); + } + + if (actual_type & ~allowed) + return make_err(bad_file_format, true_file_name + , _("is not one of the allowed types")); + + Dict::FileName id_fn(true_file_name); + Dict::Id id(0,id_fn); + + if (speller != 0) { + const SpellerDict * d = speller->locate(id); + if (d != 0) { + return d->dict; + } + } + + res = 0; + + Lock dict_cache_lock(NULL); + + if (actual_type == DT_ReadOnly) { // try to get it from the cache + dict_cache_lock.set(&dict_cache.lock); + res = dict_cache.find(id); + } + + if (!res) { + + StackPtr<Dict> w; + switch (actual_type) { + case DT_ReadOnly: + w = new_default_readonly_dict(); + break; + case DT_Multi: + w = new_default_multi_dict(); + break; + case DT_Writable: + w = new_default_writable_dict(); + break; + case DT_WritableRepl: + w = new_default_replacement_dict(); + break; + default: + abort(); + } + + RET_ON_ERR(w->load(true_file_name, config, new_dicts, speller)); + + if (actual_type == DT_ReadOnly) + dict_cache.add(w); + + res = w.release(); + + } else { // actual_type == DT_ReadOnly implied, and hence the lock + // is already acquired + + res->copy_no_lock(); + + } + + dict_cache_lock.release(); + + if (new_dicts) + new_dicts->add(res); + + return res; + } + +} + diff --git a/jni/modules/speller/default/data.hpp b/jni/modules/speller/default/data.hpp new file mode 100644 index 0000000..b25c4ab --- /dev/null +++ b/jni/modules/speller/default/data.hpp @@ -0,0 +1,223 @@ +// Copyright 2000,2011 by Kevin Atkinson under the terms of the LGPL + +#ifndef ASPELLER_DATA__HPP +#define ASPELLER_DATA__HPP + +#include "ndebug.hpp" +#include <assert.h> + +#include "copy_ptr.hpp" +#include "enumeration.hpp" +#include "language.hpp" +#include "posib_err.hpp" +#include "string.hpp" +#include "string_enumeration.hpp" +#include "word_list.hpp" +#include "cache.hpp" +#include "wordinfo.hpp" + +using namespace acommon; + +namespace acommon { + class Config; + class FStream; + class OStream; + class Convert; +} + +namespace aspeller { + + class Dictionary; + class DictList; + typedef Enumeration<WordEntry *> WordEntryEnumeration; + typedef Enumeration<Dictionary *> DictsEnumeration; + + class SoundslikeEnumeration + { + public: + virtual WordEntry * next(int) = 0; + virtual ~SoundslikeEnumeration() {} + SoundslikeEnumeration() {} + private: + SoundslikeEnumeration(const SoundslikeEnumeration &); + void operator=(const SoundslikeEnumeration &); + }; + + class Dictionary : public Cacheable, public WordList { + friend class SpellerImpl; + private: + CachePtr<const Language> lang_; + PosibErr<void> attach(const Language &); + public: + class FileName { + void copy(const FileName & other); + public: + String path; + const char * name; + + void clear(); + void set(ParmString); + + FileName() {clear();} + explicit FileName(ParmString str) {set(str);} + FileName(const FileName & other) {copy(other);} + FileName & operator=(const FileName & other) {copy(other); return *this;} + }; + class Id; + protected: + CopyPtr<Id> id_; + virtual void set_lang_hook(Config &) {} + + public: + typedef Id CacheKey; + bool cache_key_eq(const Id &); + + enum BasicType {no_type, basic_dict, replacement_dict, multi_dict}; + const BasicType basic_type; + const char * const class_name; + + protected: + Dictionary(BasicType,const char *); + public: + virtual ~Dictionary(); + + const Id & id() {return *id_;} + PosibErr<void> check_lang(ParmString lang); + PosibErr<void> set_check_lang(ParmString lang, Config &); + const LangImpl * lang() const {return lang_;}; + const Language * language() const {return lang_;}; + const char * lang_name() const; + + private: + FileName file_name_; + protected: + PosibErr<void> set_file_name(ParmString name); + PosibErr<void> update_file_info(FStream & f); + public: + bool compare(const Dictionary &); + + const char * file_name() const {return file_name_.path.c_str();} + // returns any additional dictionaries that are also used + virtual PosibErr<void> load(ParmString, Config &, DictList * = 0, + SpellerImpl * = 0); + + virtual PosibErr<void> merge(ParmString); + virtual PosibErr<void> synchronize(); + virtual PosibErr<void> save_noupdate(); + virtual PosibErr<void> save_as(ParmString); + virtual PosibErr<void> clear(); + + bool affix_compressed; + bool invisible_soundslike; // true when words are grouped by the + // soundslike but soundslike data is not + // actually stored with the word + bool soundslike_root_only; // true when affix compression is used AND + // the stored soundslike corresponds to the + // root word only + bool fast_scan; // can effectly scan for all soundslikes (or + // clean words if have_soundslike is false) + // with an edit distance of 1 or 2 + bool fast_lookup; // can effectly find all words with a given soundslike + // when the SoundslikeWord is not given + + typedef WordEntryEnumeration Enum; + typedef const char * Value; + typedef unsigned int Size; + + StringEnumeration * elements() const; + + virtual Enum * detailed_elements() const; + virtual Size size() const; + virtual bool empty() const; + + virtual bool lookup (ParmString word, const SensitiveCompare *, + WordEntry &) const; + + virtual bool clean_lookup(ParmString, WordEntry &) const; + + virtual bool soundslike_lookup(const WordEntry &, WordEntry &) const; + virtual bool soundslike_lookup(ParmString, WordEntry & o) const; + + // the elements returned are only guaranteed to remain valid + // guaranteed to return all soundslike and all words + // however an individual soundslike may appear multiple + // times in the list.... + virtual SoundslikeEnumeration * soundslike_elements() const; + + virtual PosibErr<void> add(ParmString w, ParmString s); + PosibErr<void> add(ParmString w); + + virtual PosibErr<void> remove(ParmString w); + + virtual bool repl_lookup(const WordEntry &, WordEntry &) const; + virtual bool repl_lookup(ParmString, WordEntry &) const; + + virtual PosibErr<void> add_repl(ParmString mis, ParmString cor, ParmString s); + PosibErr<void> add_repl(ParmString mis, ParmString cor); + + virtual PosibErr<void> remove_repl(ParmString mis, ParmString cor); + + virtual DictsEnumeration * dictionaries() const; + }; + + typedef Dictionary Dict; + typedef Dictionary ReplacementDict; + typedef Dictionary MultiDict; + + bool operator==(const Dictionary::Id & rhs, const Dictionary::Id & lhs); + + inline bool operator!=(const Dictionary::Id & rhs, const Dictionary::Id & lhs) + { + return !(rhs == lhs); + } + + class DictList { + // well a stack at the moment but it may eventually become a list + // NOT necessarily first in first out + Vector<Dict *> data; + private: + DictList(const DictList &); + void operator= (const DictList &); + public: + // WILL take ownership of the dict + DictList() {} + void add(Dict * o) {data.push_back(o);} + Dict * last() {return data.back();} + void pop() {data.pop_back();} + bool empty() {return data.empty();} + ~DictList() {for (; !empty(); pop()) last()->release();} + }; + + typedef unsigned int DataType; + static const DataType DT_ReadOnly = 1<<0; + static const DataType DT_Writable = 1<<1; + static const DataType DT_WritableRepl = 1<<2; + static const DataType DT_Multi = 1<<3; + static const DataType DT_Any = 0xFF; + + // any new extra dictionaries that were loaded will be ii + PosibErr<Dict *> add_data_set(ParmString file_name, + Config &, + DictList * other_dicts = 0, + SpellerImpl * = 0, + ParmString dir = 0, + DataType allowed = DT_Any); + + // implemented in readonly_ws.cc + Dictionary * new_default_readonly_dict(); + + PosibErr<void> create_default_readonly_dict(StringEnumeration * els, + Config & config); + + // implemented in multi_ws.cc + MultiDict * new_default_multi_dict(); + + // implemented in writable.cpp + Dictionary * new_default_writable_dict(); + + // implemented in writable.cpp + ReplacementDict * new_default_replacement_dict(); +} + +#endif + diff --git a/jni/modules/speller/default/data.lo b/jni/modules/speller/default/data.lo new file mode 100644 index 0000000..69fd904 --- /dev/null +++ b/jni/modules/speller/default/data.lo @@ -0,0 +1,12 @@ +# modules/speller/default/data.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/data.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/data_id.hpp b/jni/modules/speller/default/data_id.hpp new file mode 100644 index 0000000..f640ad6 --- /dev/null +++ b/jni/modules/speller/default/data_id.hpp @@ -0,0 +1,29 @@ +#ifndef ASPELLER_DATA_ID__HPP +#define ASPELLER_DATA_ID__HPP + +#include "settings.h" + +#include <sys/stat.h> + +namespace aspeller { + + class Dict::Id { + public: // but don't use + const Dict * ptr; + const char * file_name; +#ifdef USE_FILE_INO + ino_t ino; + dev_t dev; +#endif + public: + Id(Dict * p, const FileName & fn = FileName()); + }; + + inline bool Dict::cache_key_eq(const Id & o) + { + return *id_ == o; + } + +} + +#endif diff --git a/jni/modules/speller/default/data_util.hpp b/jni/modules/speller/default/data_util.hpp new file mode 100644 index 0000000..58fd128 --- /dev/null +++ b/jni/modules/speller/default/data_util.hpp @@ -0,0 +1,46 @@ +#ifndef __aspeller_data_util_hh__ +#define __aspeller_data_util_hh__ + +#include <ctime> + +//POSIX headers +#include <sys/stat.h> + +#include "parm_string.hpp" + +using namespace acommon; + +namespace aspeller { + + template <class Itr> + struct CharStrParms { + typedef const char * Value; + typedef Itr Iterator; + Iterator end_; + CharStrParms(Iterator e) : end_(e) {} + bool endf(Iterator i) const {return i == end_;} + Value deref(Iterator i) const {return *i;} + Value end_state() const {return 0;} + }; + + template <class Itr> + struct StrParms { + typedef const char * Value; + typedef Itr Iterator; + Iterator end_; + StrParms(Iterator e) : end_(e) {} + bool endf(Iterator i) const {return i == end_;} + Value deref(Iterator i) const {return i->c_str();} + Value end_state() const {return 0;} + }; + + inline time_t modification_date(ParmString file) { + struct stat file_stat; + if (stat(file, &file_stat) == 0) + return file_stat.st_mtime; + else + return 0; + } +} + +#endif diff --git a/jni/modules/speller/default/editdist.cpp b/jni/modules/speller/default/editdist.cpp new file mode 100644 index 0000000..a3f946c --- /dev/null +++ b/jni/modules/speller/default/editdist.cpp @@ -0,0 +1,56 @@ + +#include <cstring> + +#include "editdist.hpp" +#include "matrix.hpp" +#include "vararray.hpp" + +// edit_distance is implemented using a straight forward dynamic +// programming algorithm with out any special tricks. Its space +// usage AND running time is tightly asymptotically bounded by +// strlen(a)*strlen(b) + +namespace aspeller { + + short edit_distance(ParmString a0, ParmString b0, + const EditDistanceWeights & w) + { + int a_size = a0.size() + 1; + int b_size = b0.size() + 1; + VARARRAY(short, e_d, a_size * b_size); + ShortMatrix e(a_size,b_size,e_d); + e(0, 0) = 0; + for (int j = 1; j != b_size; ++j) + e(0, j) = e(0, j-1) + w.del1; + const char * a = a0.str() - 1; + const char * b = b0.str() - 1; + short te; + for (int i = 1; i != a_size; ++i) { + e(i, 0) = e(i-1, 0) + w.del2; + for (int j = 1; j != b_size; ++j) { + if (a[i] == b[j]) { + + e(i, j) = e(i-1, j-1); + + } else { + + e(i, j) = w.sub + e(i-1, j-1); + + if (i != 1 && j != 1 && + a[i] == b[j-1] && a[i-1] == b[j]) + { + te = w.swap + e(i-2, j-2); + if (te < e(i, j)) e(i, j) = te; + } + + te = w.del1 + e(i-1, j); + if (te < e(i, j)) e(i, j) = te; + te = w.del2 + e(i, j-1); + if (te < e(i, j)) e(i, j) = te; + + } + } + } + return e(a_size-1, b_size-1); + } +} diff --git a/jni/modules/speller/default/editdist.hpp b/jni/modules/speller/default/editdist.hpp new file mode 100644 index 0000000..11c0bfa --- /dev/null +++ b/jni/modules/speller/default/editdist.hpp @@ -0,0 +1,30 @@ +#ifndef __aspeller_edit_distance_hh__ +#define __aspeller_edit_distance_hh__ + +#include "parm_string.hpp" +#include "weights.hpp" + +namespace aspeller { + + using acommon::ParmString; + + // edit_distance finds the shortest edit distance. The edit distance is + // (cost of swap)(# of swaps) + (cost of deletion)(# of deletions) + // + (cost of insertion)(# of insertions) + // + (cost of substitutions)(# of substitutions) + + // Preconditions: + // max(strlen(a), strlen(b))*max(of the edit weights) <= 2^15 + // if violated than an incorrect result may be returned (which may be negative) + // due to overflow of a short integer + // a,b are not null pointers + // Returns: + // the edit distance between a and b + + // the running time is tightly asymptotically bounded by strlen(a)*strlen(b) + + short edit_distance(ParmString a, ParmString b, + const EditDistanceWeights & w = EditDistanceWeights()); +} + +#endif diff --git a/jni/modules/speller/default/editdist.lo b/jni/modules/speller/default/editdist.lo new file mode 100644 index 0000000..25428d7 --- /dev/null +++ b/jni/modules/speller/default/editdist.lo @@ -0,0 +1,12 @@ +# modules/speller/default/editdist.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/editdist.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/editdist2.hpp b/jni/modules/speller/default/editdist2.hpp new file mode 100644 index 0000000..072a9ea --- /dev/null +++ b/jni/modules/speller/default/editdist2.hpp @@ -0,0 +1,28 @@ + +#include "leditdist.hpp" +#include "editdist.hpp" + +#include <cassert> + +namespace aspeller { + inline int edit_distance(ParmString a, ParmString b, + int level, // starting level + int limit, // maximum level + const EditDistanceWeights & w + = EditDistanceWeights()) + { + int score; + assert(level > 0 && limit >= level); + do { + if (level == 2) { + score = limit2_edit_distance(a,b,w); + } else if (level < 5) { + score = limit_edit_distance(a,b,level,w); + } else { + score = edit_distance(a,b,w); + } + ++level; + } while (score >= LARGE_NUM && level <= limit); + return score; + } +} diff --git a/jni/modules/speller/default/language.cpp b/jni/modules/speller/default/language.cpp new file mode 100644 index 0000000..c7c9706 --- /dev/null +++ b/jni/modules/speller/default/language.cpp @@ -0,0 +1,742 @@ +// Copyright 2000 by Kevin Atkinson under the terms of the LGPL + +#include "settings.h" + +#include <vector> +#include <assert.h> + +#include <iostream.hpp> + +#include "asc_ctype.hpp" +#include "clone_ptr-t.hpp" +#include "config.hpp" +#include "enumeration.hpp" +#include "errors.hpp" +#include "file_data_util.hpp" +#include "fstream.hpp" +#include "language.hpp" +#include "string.hpp" +#include "cache-t.hpp" +#include "getdata.hpp" +#include "file_util.hpp" + +#ifdef ENABLE_NLS +# include <langinfo.h> +#endif + +#include "gettext.h" + +namespace aspeller { + + static const char TO_CHAR_TYPE[256] = { + // 1 2 3 4 5 6 7 8 9 A B C D E F + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 1 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 2 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 3 + 0, 4, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 6, 5, 0, 0, // 4 + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, // 5 + 0, 4, 0, 0, 3, 0, 0, 0, 2, 0, 0, 0, 6, 5, 0, 0, // 6 + 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, // 7 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 8 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 9 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // A + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // B + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // C + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // D + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // E + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 // F + }; + + static const int FOR_CONFIG = 1; + + static const KeyInfo lang_config_keys[] = { + {"charset", KeyInfoString, "iso-8859-1", ""} + , {"data-encoding", KeyInfoString, "<charset>", ""} + , {"name", KeyInfoString, "", ""} + , {"run-together", KeyInfoBool, "", "", 0, FOR_CONFIG} + , {"run-together-limit", KeyInfoInt, "", "", 0, FOR_CONFIG} + , {"run-together-min", KeyInfoInt, "", "", 0, FOR_CONFIG} + , {"soundslike", KeyInfoString, "none", ""} + , {"special", KeyInfoString, "", ""} + , {"ignore-accents" , KeyInfoBool, "", "", 0, FOR_CONFIG} + , {"invisible-soundslike",KeyInfoBool, "", "", 0, FOR_CONFIG} + , {"keyboard", KeyInfoString, "standard", "", 0, FOR_CONFIG} + , {"affix", KeyInfoString, "none", ""} + , {"affix-compress", KeyInfoBool, "false", "", 0, FOR_CONFIG} + , {"partially-expand", KeyInfoBool, "false", "", 0, FOR_CONFIG} + , {"affix-char", KeyInfoString, "/", "", 0, FOR_CONFIG} + , {"flag-char", KeyInfoString, ":", "", 0, FOR_CONFIG} + , {"repl-table", KeyInfoString, "none", ""} + , {"sug-split-char", KeyInfoList, "", "", 0, FOR_CONFIG} + , {"store-as", KeyInfoString, "", ""} + , {"try", KeyInfoString, "", ""} + , {"normalize", KeyInfoBool, "false", "", 0, FOR_CONFIG} + , {"norm-required", KeyInfoBool, "false", "", 0, FOR_CONFIG} + , {"norm-form", KeyInfoString, "nfc", "", 0, FOR_CONFIG} + }; + + static GlobalCache<Language> language_cache("language"); + + PosibErr<void> Language::setup(const String & lang, const Config * config) + { + // + // get_lang_info + // + + String dir1,dir2,path; + + fill_data_dir(config, dir1, dir2); + dir_ = find_file(path,dir1,dir2,lang,".dat"); + + lang_config_ = + new Config("speller-lang", + lang_config_keys, + lang_config_keys + sizeof(lang_config_keys)/sizeof(KeyInfo)); + Config & data = *lang_config_; + + { + PosibErrBase pe = data.read_in_file(path); + if (pe.has_err(cant_read_file)) { + String mesg = pe.get_err()->mesg; + mesg[0] = asc_tolower(mesg[0]); + mesg = _("This is probably because: ") + mesg; + return make_err(unknown_language, lang, mesg); + } else if (pe.has_err()) + return pe; + } + + if (!data.have("name")) + return make_err(bad_file_format, path, _("The required field \"name\" is missing.")); + + String buf; + name_ = data.retrieve("name"); + charset_ = fix_encoding_str(data.retrieve("charset"), buf); + charmap_ = charset_; + data_encoding_ = fix_encoding_str(data.retrieve("data-encoding"), buf); + + DataPair d; + + // + // read header of cset data file + // + + FStream char_data; + String char_data_name; + find_file(char_data_name,dir1,dir2,charset_,".cset"); + RET_ON_ERR(char_data.open(char_data_name, "r")); + + String temp; + char * p; + do { + p = get_nb_line(char_data, temp); + if (*p == '=') { + ++p; + while (asc_isspace(*p)) ++p; + charmap_ = p; + } + } while (*p != '/'); + + // + // fill in tables + // + + for (unsigned int i = 0; i != 256; ++i) { + p = get_nb_line(char_data, temp); + if (!p || strtoul(p, &p, 16) != i) + return make_err(bad_file_format, char_data_name); + to_uni_[i] = strtol(p, &p, 16); + while (asc_isspace(*p)) ++p; + char_type_[i] = static_cast<CharType>(TO_CHAR_TYPE[to_uchar(*p++)]); + while (asc_isspace(*p)) ++p; + ++p; // display, ignored for now + CharInfo inf = char_type_[i] >= Letter ? LETTER : 0; + to_upper_[i] = static_cast<char>(strtol(p, &p, 16)); + inf |= to_uchar(to_upper_[i]) == i ? UPPER : 0; + to_lower_[i] = static_cast<char>(strtol(p, &p, 16)); + inf |= to_uchar(to_lower_[i]) == i ? LOWER : 0; + to_title_[i] = static_cast<char>(strtol(p, &p, 16)); + inf |= to_uchar(to_title_[i]) == i ? TITLE : 0; + to_plain_[i] = static_cast<char>(strtol(p, &p, 16)); + inf |= to_uchar(to_plain_[i]) == i ? PLAIN : 0; + inf |= to_uchar(to_plain_[i]) == 0 ? PLAIN : 0; + sl_first_[i] = static_cast<char>(strtol(p, &p, 16)); + sl_rest_[i] = static_cast<char>(strtol(p, &p, 16)); + char_info_[i] = inf; + } + + for (unsigned int i = 0; i != 256; ++i) { + de_accent_[i] = to_plain_[i] == 0 ? to_uchar(i) : to_plain_[i]; + } + + to_plain_[0] = 0x10; // to make things slightly easier + to_plain_[1] = 0x10; + + for (unsigned int i = 0; i != 256; ++i) { + to_stripped_[i] = to_plain_[(unsigned char)to_lower_[i]]; + } + + char_data.close(); + + if (data.have("store-as")) + buf = data.retrieve("store-as"); + else if (data.retrieve_bool("affix-compress")) + buf = "lower"; + else + buf = "stripped"; + char * clean_is; + if (buf == "stripped") { + store_as_ = Stripped; + clean_is = to_stripped_; + } else { + store_as_ = Lower; + clean_is = to_lower_; + } + + for (unsigned i = 0; i != 256; ++i) { + to_clean_[i] = char_type_[i] > NonLetter ? clean_is[i] : 0; + if ((unsigned char)to_clean_[i] == i) char_info_[i] |= CLEAN; + } + + to_clean_[0x00] = 0x10; // to make things slightly easier + to_clean_[0x10] = 0x10; + + clean_chars_ = get_clean_chars(*this); + + // + // determine which mapping to use + // + + if (charmap_ != charset_) { + if (file_exists(dir1 + charset_ + ".cmap") || + file_exists(dir2 + charset_ + ".cmap")) + { + charmap_ = charset_; + } else if (data_encoding_ == charset_) { + data_encoding_ = charmap_; + } + } + + // + // set up conversions + // + { +#ifdef ENABLE_NLS + const char * tmp = 0; + tmp = bind_textdomain_codeset("aspell", 0); +#ifdef HAVE_LANGINFO_CODESET + if (!tmp) tmp = nl_langinfo(CODESET); +#endif + if (ascii_encoding(*config, tmp)) tmp = 0; + if (tmp) + RET_ON_ERR(mesg_conv_.setup(*config, charmap_, fix_encoding_str(tmp, buf), NormTo)); + else +#endif + RET_ON_ERR(mesg_conv_.setup(*config, charmap_, data_encoding_, NormTo)); + // no need to check for errors here since we know charmap_ is a + // supported encoding + to_utf8_.setup(*config, charmap_, "utf-8", NormTo); + from_utf8_.setup(*config, "utf-8", charmap_, NormFrom); + } + + Conv iconv; + RET_ON_ERR(iconv.setup(*config, data_encoding_, charmap_, NormFrom)); + + // + // set up special + // + + init(data.retrieve("special"), d, buf); + while (split(d)) { + char c = iconv(d.key)[0]; + split(d); + special_[to_uchar(c)] = + SpecialChar (d.key[0] == '*',d.key[1] == '*', d.key[2] == '*'); + } + + // + // prep phonetic code + // + + { + PosibErr<Soundslike *> pe = new_soundslike(data.retrieve("soundslike"), + iconv, + this); + if (pe.has_err()) return pe; + soundslike_.reset(pe.data); + } + soundslike_chars_ = soundslike_->soundslike_chars(); + + have_soundslike_ = strcmp(soundslike_->name(), "none") != 0; + + // + // prep affix code + // + { + PosibErr<AffixMgr *> pe = new_affix_mgr(data.retrieve("affix"), iconv, this); + if (pe.has_err()) return pe; + affix_.reset(pe.data); + } + + // + // fill repl tables (if any) + // + + String repl = data.retrieve("repl-table"); + have_repl_ = false; + if (repl != "none") { + + String repl_file; + FStream REPL; + find_file(repl_file, dir1, dir2, repl, "_repl", ".dat"); + RET_ON_ERR(REPL.open(repl_file, "r")); + + size_t num_repl = 0; + while (getdata_pair(REPL, d, buf)) { + ::to_lower(d.key); + if (d.key == "rep") { + num_repl = atoi(d.value); // FIXME make this more robust + break; + } + } + + if (num_repl > 0) + have_repl_ = true; + + for (size_t i = 0; i != num_repl; ++i) { + bool res = getdata_pair(REPL, d, buf); + assert(res); // FIXME + ::to_lower(d.key); + assert(d.key == "rep"); // FIXME + split(d); + SuggestRepl rep; + rep.substr = buf_.dup(iconv(d.key)); + if (check_if_valid(*this, rep.substr).get_err()) + continue; // FIXME: This should probably be an error, but + // this may cause problems with compatibility with + // Myspell as these entries may make sense for + // Myspell (but obviously not for Aspell) + to_clean((char *)rep.substr, rep.substr); + rep.repl = buf_.dup(iconv(d.value)); + if (check_if_valid(*this, rep.repl).get_err()) + continue; // FIXME: Ditto + to_clean((char *)rep.repl, rep.repl); + if (strcmp(rep.substr, rep.repl) == 0 || rep.substr[0] == '\0') + continue; // FIXME: Ditto + repls_.push_back(rep); + } + + } + return no_err; + } + + void Language::set_lang_defaults(Config & config) const + { + config.replace_internal("actual-lang", name()); + config.lang_config_merge(*lang_config_, FOR_CONFIG, data_encoding_); + } + + WordInfo Language::get_word_info(ParmStr str) const + { + CharInfo first = CHAR_INFO_ALL, all = CHAR_INFO_ALL; + const char * p = str; + while (*p && (first = char_info(*p++), all &= first, !(first & LETTER))); + while (*p) all &= char_info(*p++); + WordInfo res; + if (all & LOWER) res = AllLower; + else if (all & UPPER) res = AllUpper; + else if (first & TITLE) res = FirstUpper; + else res = Other; + if (all & PLAIN) res |= ALL_PLAIN; + if (all & CLEAN) res |= ALL_CLEAN; + return res; + } + + CasePattern Language::case_pattern(ParmStr str) const + { + CharInfo first = CHAR_INFO_ALL, all = CHAR_INFO_ALL; + const char * p = str; + while (*p && (first = char_info(*p++), all &= first, !(first & LETTER))); + while (*p) all &= char_info(*p++); + if (all & LOWER) return AllLower; + else if (all & UPPER) return AllUpper; + else if (first & TITLE) return FirstUpper; + else return Other; + } + + CasePattern Language::case_pattern(const char * str, unsigned size) const + { + CharInfo first = CHAR_INFO_ALL, all = CHAR_INFO_ALL; + const char * p = str; + const char * end = p + size; + while (p < end && (first = char_info(*p++), all &= first, !(first & LETTER))); + while (p < end) all &= char_info(*p++); + if (all & LOWER) return AllLower; + else if (all & UPPER) return AllUpper; + else if (first & TITLE) return FirstUpper; + else return Other; + } + + void Language::fix_case(CasePattern case_pattern, + char * res, const char * str) const + { + if (!str[0]) return; + if (case_pattern == AllUpper) { + to_upper(res,str); + } if (case_pattern == FirstUpper && is_lower(str[0])) { + *res = to_title(str[0]); + if (res == str) return; + res++; + str++; + while (*str) *res++ = *str++; + *res = '\0'; + } else { + if (res == str) return; + while (*str) *res++ = *str++; + *res = '\0'; + } + } + + const char * Language::fix_case(CasePattern case_pattern, const char * str, + String & buf) const + { + if (!str[0]) return str; + if (case_pattern == AllUpper) { + to_upper(buf,str); + return buf.str(); + } if (case_pattern == FirstUpper && is_lower(str[0])) { + buf.clear(); + buf += to_title(str[0]); + str++; + while (*str) buf += *str++; + return buf.str(); + } else { + return str; + } + } + + WordAff * Language::fake_expand(ParmStr word, ParmStr aff, + ObjStack & buf) const + { + WordAff * cur = (WordAff *)buf.alloc_bottom(sizeof(WordAff)); + cur->word = buf.dup(word); + cur->aff = (unsigned char *)buf.dup(""); + cur->next = 0; + return cur; + } + + bool SensitiveCompare::operator() (const char * word0, + const char * inlist0) const + { + assert(*word0 && *inlist0); + try_again: + const char * word = word0; + const char * inlist = inlist0; + + if (!case_insensitive) { + + if (begin) { + if (*word == *inlist || *word == lang->to_title(*inlist)) ++word, ++inlist; + else goto try_upper; + } + while (*word && *inlist && *word == *inlist) ++word, ++inlist; + if (*inlist) goto try_upper; + if (end && lang->special(*word).end) ++word; + if (*word) goto try_upper; + return true; + try_upper: + word = word0; + inlist = inlist0; + while (*word && *inlist && *word == lang->to_upper(*inlist)) ++word, ++inlist; + if (*inlist) goto fail; + if (end && lang->special(*word).end) ++word; + if (*word) goto fail; + + } else { // case_insensitive + + while (*word && *inlist && + lang->to_upper(*word) == lang->to_upper(*inlist)) ++word, ++inlist; + if (*inlist) goto fail; + if (end && lang->special(*word).end) ++word; + if (*word) goto fail; + + } + return true; + + fail: + if (begin && lang->special(*word0).begin) {++word0; goto try_again;} + return false; + } + + static PosibErrBase invalid_word_e(const Language & l, + ParmStr word, + const char * msg, + char chr = 0) + { + char m[200]; + if (chr) { + // the "char *" cast is needed due to an incorrect "snprintf" + // declaration on some platforms. + snprintf(m, 200, (char *)msg, MsgConv(l)(chr), l.to_uni(chr)); + msg = m; + } + return make_err(invalid_word, MsgConv(l)(word), msg); + } + + PosibErr<void> check_if_valid(const Language & l, ParmStr word) { + if (*word == '\0') + return invalid_word_e(l, word, _("Empty string.")); + const char * i = word; + if (!l.is_alpha(*i)) { + if (!l.special(*i).begin) + return invalid_word_e(l, word, _("The character '%s' (U+%02X) may not appear at the beginning of a word."), *i); + else if (!l.is_alpha(*(i+1))) + return invalid_word_e(l, word, _("The character '%s' (U+%02X) must be followed by an alphabetic character."), *i); + else if (!*(i+1)) + return invalid_word_e(l, word, _("Does not contain any alphabetic characters.")); + } + for (;*(i+1) != '\0'; ++i) { + if (!l.is_alpha(*i)) { + if (!l.special(*i).middle) + return invalid_word_e(l, word, _("The character '%s' (U+%02X) may not appear in the middle of a word."), *i); + else if (!l.is_alpha(*(i+1))) + return invalid_word_e(l, word, _("The character '%s' (U+%02X) must be followed by an alphabetic character."), *i); + } + } + if (!l.is_alpha(*i)) { + if (*i == '\r') + return invalid_word_e(l, word, _("The character '\\r' (U+0D) may not appear at the end of a word. " + "This probably means means that the file is using MS-DOS EOL instead of Unix EOL."), *i); + if (!l.special(*i).end) + return invalid_word_e(l, word, _("The character '%s' (U+%02X) may not appear at the end of a word."), *i); + } + return no_err; + } + + PosibErr<void> validate_affix(const Language & l, ParmStr word, ParmStr aff) + { + for (const char * a = aff; *a; ++a) { + CheckAffixRes res = l.affix()->check_affix(word, *a); + if (res == InvalidAffix) + return make_err(invalid_affix, MsgConv(l)(*a), MsgConv(l)(word)); + else if (res == InapplicableAffix) + return make_err(inapplicable_affix, MsgConv(l)(*a), MsgConv(l)(word)); + } + return no_err; + } + + CleanAffix::CleanAffix(const Language * lang0, OStream * log0) + : lang(lang0), log(log0), msgconv1(lang0), msgconv2(lang0) + { + } + + char * CleanAffix::operator()(ParmStr word, char * aff) + { + char * r = aff; + for (const char * a = aff; *a; ++a) { + CheckAffixRes res = lang->affix()->check_affix(word, *a); + if (res == ValidAffix) { + *r = *a; + ++r; + } else if (log) { + const char * msg = res == InvalidAffix + ? _("Warning: Removing invalid affix '%s' from word %s.\n") + : _("Warning: Removing inapplicable affix '%s' from word %s.\n"); + log->printf(msg, msgconv1(*a), msgconv2(word)); + } + } + *r = '\0'; + return r; + } + + String get_stripped_chars(const Language & lang) { + bool chars_set[256] = {0}; + String chars_list; + for (int i = 0; i != 256; ++i) + { + char c = static_cast<char>(i); + if (lang.is_alpha(c) || lang.special(c).any) + chars_set[static_cast<unsigned char>(lang.to_stripped(c))] = true; + } + for (int i = 1; i != 256; ++i) + { + if (chars_set[i]) + chars_list += static_cast<char>(i); + } + return chars_list; + } + + String get_clean_chars(const Language & lang) { + bool chars_set[256] = {0}; + String chars_list; + for (int i = 0; i != 256; ++i) + { + char c = static_cast<char>(i); + if (lang.is_alpha(c) || lang.special(c).any) + chars_set[static_cast<unsigned char>(lang.to_clean(c))] = true; + } + for (int i = 1; i != 256; ++i) + { + if (chars_set[i]) { + chars_list += static_cast<char>(i); + } + } + return chars_list; + } + + PosibErr<Language *> new_language(const Config & config, ParmStr lang) + { + if (!lang) + return get_cache_data(&language_cache, &config, config.retrieve("lang")); + else + return get_cache_data(&language_cache, &config, lang); + } + + PosibErr<void> open_affix_file(const Config & c, FStream & f) + { + String lang = c.retrieve("lang"); + + String dir1,dir2,path; + fill_data_dir(&c, dir1, dir2); + String dir = find_file(path,dir1,dir2,lang,".dat"); + + String file; + file += dir; + file += '/'; + file += lang; + file += "_affix.dat"; + + RET_ON_ERR(f.open(file,"r")); + + return no_err; + } + + bool find_language(Config & c) + { + String l_data = c.retrieve("lang"); + char * l = l_data.mstr(); + + String dir1,dir2,path; + fill_data_dir(&c, dir1, dir2); + + char * s = l + strlen(l); + + while (s > l) { + find_file(path,dir1,dir2,l,".dat"); + if (file_exists(path)) { + c.replace_internal("actual-lang", l); + return true; + } + while (s > l && !(*s == '-' || *s == '_')) --s; + *s = '\0'; + } + return false; + } + + WordListIterator::WordListIterator(StringEnumeration * in0, + const Language * lang0, + OStream * log0) + : in(in0), lang(lang0), log(log0), val(), str(0), str_end(0), brk(), + clean_affix(lang0, log0) + { + } + + PosibErr<void> WordListIterator::init(Config & config) + { + if (!config.have("norm-strict")) + config.replace("norm-strict", "true"); + have_affix = lang->have_affix(); + validate_words = config.retrieve_bool("validate-words"); + validate_affixes = config.retrieve_bool("validate-affixes"); + clean_words = config.retrieve_bool("clean-words"); + skip_invalid_words = config.retrieve_bool("skip-invalid-words"); + clean_affixes = config.retrieve_bool("clean-affixes"); + if (config.have("encoding")) { + RET_ON_ERR(iconv.setup(config, config.retrieve("encoding"), lang->charmap(),NormFrom)); + } else { + RET_ON_ERR(iconv.setup(config, lang->data_encoding(), lang->charmap(), NormFrom)); + } + brk[0] = ' '; + if (!lang->special('-').any) brk[1] = '-'; + return no_err; + } + + PosibErr<bool> WordListIterator::adv() + { + loop: + if (!str) { + orig = in->next(); + if (!orig) return false; + if (!*orig) goto loop; + PosibErr<const char *> pe = iconv(orig); + if (pe.has_err()) { + if (!skip_invalid_words) return pe; + if (log) log->printf(_("Warning: %s Skipping string.\n"), pe.get_err()->mesg); + else pe.ignore_err(); + goto loop; + } + if (pe.data == orig) { + data = orig; + data.ensure_null_end(); + str = data.pbegin(); + str_end = data.pend(); + } else { + str = iconv.buf.pbegin(); + str_end = iconv.buf.pend(); + } + char * aff = str_end; + char * aff_end = str_end; + if (have_affix) { + aff = strchr(str, '/'); + if (aff == 0) { + aff = str_end; + } else { + *aff = '\0'; + str_end = aff; + ++aff; + } + if (validate_affixes) { + if (clean_affixes) + aff_end = clean_affix(str, aff); + else + RET_ON_ERR(validate_affix(*lang, str, aff)); + } + } + val.aff.str = aff; + val.aff.size = aff_end - aff; + if (!*aff && validate_words && clean_words) { + char * s = str; + while (s < str_end) { + while (s < str_end && !lang->is_alpha(*s) && !lang->special(*s).begin) + *s++ = '\0'; + s += strcspn(s, brk); + *s = '\0'; + char * s2 = s - 1; + while (s2 >= str && *s2 && !lang->is_alpha(*s2) && !lang->special(*s2).end) + *s2-- = '\0'; + } + } + } + while (str < str_end) + { + if (!*str) {++str; continue;} + + PosibErrBase pe2 = validate_words ? check_if_valid(*lang, str) : no_err; + + val.word.str = str; + val.word.size = strlen(str); + str += val.word.size + 1; + + if (!pe2.has_err() && val.word.size + (*val.aff ? val.aff.size + 1 : 0) > 240) + pe2 = make_err(invalid_word, MsgConv(lang)(val.word), + _("The total length is larger than 240 characters.")); + + if (!pe2.has_err()) return true; + if (!skip_invalid_words) return pe2; + if (log) log->printf(_("Warning: %s Skipping word.\n"), pe2.get_err()->mesg); + else pe2.ignore_err(); + } + str = 0; + goto loop; + } +} diff --git a/jni/modules/speller/default/language.hpp b/jni/modules/speller/default/language.hpp new file mode 100644 index 0000000..3cd3d63 --- /dev/null +++ b/jni/modules/speller/default/language.hpp @@ -0,0 +1,476 @@ +// Copyright 2004 by Kevin Atkinson under the terms of the LGPL + +#ifndef ASPELLER_LANGUAGE__HPP +#define ASPELLER_LANGUAGE__HPP + +#include "affix.hpp" +#include "cache.hpp" +#include "config.hpp" +#include "convert.hpp" +#include "phonetic.hpp" +#include "posib_err.hpp" +#include "stack_ptr.hpp" +#include "string.hpp" +#include "objstack.hpp" +#include "string_enumeration.hpp" + +#include "iostream.hpp" + +using namespace acommon; + +namespace acommon { + struct CheckInfo; +} + +namespace aspeller { + + struct SuggestRepl { + const char * substr; + const char * repl; + }; + + class SuggestReplEnumeration + { + const SuggestRepl * i_; + const SuggestRepl * end_; + public: + SuggestReplEnumeration(const SuggestRepl * b, const SuggestRepl * e) + : i_(b), end_(e) {} + bool at_end() const {return i_ == end_;} + const SuggestRepl * next() { + if (i_ == end_) return 0; + return i_++; + } + }; + + // CharInfo + + typedef unsigned int CharInfo; // 6 bits + + static const CharInfo LOWER = (1 << 0); + static const CharInfo UPPER = (1 << 1); + static const CharInfo TITLE = (1 << 2); + static const CharInfo PLAIN = (1 << 3); + static const CharInfo LETTER = (1 << 4); + static const CharInfo CLEAN = (1 << 5); + + static const CharInfo CHAR_INFO_ALL = 0x3F; + + // + + enum StoreAs {Stripped, Lower}; + + class Language : public Cacheable { + public: + typedef const Config CacheConfig; + typedef String CacheKey; + + enum CharType {Unknown, WhiteSpace, Hyphen, Digit, + NonLetter, Modifier, Letter}; + + struct SpecialChar { + bool begin; + bool middle; + bool end; + bool any; + SpecialChar() : begin(false), middle(false), end(false), any(false) {} + SpecialChar(bool b, bool m, bool e) : begin(b), middle(m), end(e), + any(b || m || e) {} + }; + + private: + String dir_; + String name_; + String charset_; + String charmap_; + String data_encoding_; + + ConvObj mesg_conv_; + ConvObj to_utf8_; + ConvObj from_utf8_; + + unsigned char to_uchar(char c) const {return static_cast<unsigned char>(c);} + + SpecialChar special_[256]; + CharInfo char_info_[256]; + char to_lower_[256]; + char to_upper_[256]; + char to_title_[256]; + char to_stripped_[256]; + char to_plain_[256]; + int to_uni_[256]; + CharType char_type_[256]; + char to_clean_[256]; + char de_accent_[256]; + + StoreAs store_as_; + + String soundslike_chars_; + String clean_chars_; + + bool have_soundslike_; + bool have_repl_; + + StackPtr<Soundslike> soundslike_; + StackPtr<AffixMgr> affix_; + StackPtr<Config> lang_config_; + + StringBuffer buf_; + Vector<SuggestRepl> repls_; + + Language(const Language &); + void operator=(const Language &); + + public: // but don't use + + char sl_first_[256]; + char sl_rest_[256]; + + public: + + Language() {} + PosibErr<void> setup(const String & lang, const Config * config); + void set_lang_defaults(Config & config) const; + + const char * data_dir() const {return dir_.c_str();} + const char * name() const {return name_.c_str();} + const char * charmap() const {return charmap_.c_str();} + const char * data_encoding() const {return data_encoding_.c_str();} + + const Convert * mesg_conv() const {return mesg_conv_.ptr;} + const Convert * to_utf8() const {return to_utf8_.ptr;} + const Convert * from_utf8() const {return from_utf8_.ptr;} + + int to_uni(char c) const {return to_uni_[to_uchar(c)];} + + // + // case conversion + // + + char to_upper(char c) const {return to_upper_[to_uchar(c)];} + bool is_upper(char c) const {return to_upper(c) == c;} + + char to_lower(char c) const {return to_lower_[to_uchar(c)];} + bool is_lower(char c) const {return to_lower(c) == c;} + + char to_title(char c) const {return to_title_[to_uchar(c)];} + bool is_title(char c) const {return to_title(c) == c;} + + char * to_lower(char * res, const char * str) const { + while (*str) *res++ = to_lower(*str++); *res = '\0'; return res;} + char * to_upper(char * res, const char * str) const { + while (*str) *res++ = to_upper(*str++); *res = '\0'; return res;} + + void to_lower(String & res, const char * str) const { + res.clear(); while (*str) res += to_lower(*str++);} + void to_upper(String & res, const char * str) const { + res.clear(); while (*str) res += to_upper(*str++);} + + bool is_lower(const char * str) const { + while (*str) {if (!is_lower(*str++)) return false;} return true;} + bool is_upper(const char * str) const { + while (*str) {if (!is_upper(*str++)) return false;} return true;} + + // + // + // + + char to_plain(char c) const {return to_plain_[to_uchar(c)];} + + char de_accent(char c) const {return de_accent_[to_uchar(c)];} + + SpecialChar special(char c) const {return special_[to_uchar(c)];} + + CharType char_type(char c) const {return char_type_[to_uchar(c)];} + bool is_alpha(char c) const {return char_type(c) > NonLetter;} + + CharInfo char_info(char c) const {return char_info_[to_uchar(c)];} + + // + // stripped + // + + char to_stripped(char c) const {return to_stripped_[to_uchar(c)];} + + // return a pointer to the END of the string + char * to_stripped(char * res, const char * str) const { + for (; *str; ++str) { + char c = to_stripped(*str); + if (c) *res++ = c; + } + *res = '\0'; + return res; + } + void to_stripped(String & res, const char * str) const { + res.clear(); + for (; *str; ++str) { + char c = to_stripped(*str); + if (c) res += c; + } + } + + bool is_stripped(char c) const {return to_stripped(c) == c;} + + bool is_stripped(const char * str) const { + while (*str) {if (!is_stripped(*str++)) return false;} return true;} + + // + // Clean + // + // The "clean" form is how words are indixed in the dictionary. + // It will at very least convert the word to lower case. It may + // also strip accents and non-letters. + // + + char to_clean(char c) const {return to_clean_[to_uchar(c)];} + + char * to_clean(char * res, const char * str) const { + for (; *str; ++str) { + char c = to_clean(*str); + if (c) *res++ = c; + } + *res = '\0'; + return res; + } + void to_clean(String & res, const char * str) const { + res.clear(); + for (; *str; ++str) { + char c = to_clean(*str); + if (c) res += c; + } + } + + bool is_clean(char c) const {return to_clean(c) == c;} + + bool is_clean(const char * str) const { + while (*str) {if (!is_clean(*str++)) return false;} return true;} + + bool is_clean_wi(WordInfo wi) const { + return false; + //return wi & CASE_PATTEN == AllLower && + } + + + const char * clean_chars() const {return clean_chars_.c_str();} + + // + // Soundslike + // + + bool have_soundslike() const {return have_soundslike_;} + + const char * soundslike_name() const {return soundslike_->name();} + const char * soundslike_version() const {return soundslike_->version();} + + void to_soundslike(String & res, ParmStr word) const { + res.resize(word.size()); + char * e = soundslike_->to_soundslike(res.data(), word.str(), word.size()); + res.resize(e - res.data()); + } + + // returns a pointer to the END of the string + char * to_soundslike(char * res, const char * str, int len = -1) const { + return soundslike_->to_soundslike(res,str,len); + } + + char * to_soundslike(char * res, const char * str, int len, WordInfo wi) const { + if (!have_soundslike_ && (wi & ALL_CLEAN)) return 0; + else return soundslike_->to_soundslike(res,str,len); + } + + const char * soundslike_chars() const {return soundslike_chars_.c_str();} + + // + // Affix compression methods + // + + const AffixMgr * affix() const {return affix_;} + + bool have_affix() const {return affix_;} + + void munch(ParmStr word, GuessInfo * cl, bool cross = true) const { + if (affix_) + affix_->munch(word, cl, cross); + } + + WordAff * expand(ParmStr word, ParmStr aff, + ObjStack & buf, int limit = INT_MAX) const { + if (affix_) + return affix_->expand(word, aff, buf, limit); + else + return fake_expand(word, aff, buf); + } + WordAff * fake_expand(ParmStr word, ParmStr aff, ObjStack & buf) const; + + // + // Repl + // + + bool have_repl() const {return have_repl_;} + + SuggestReplEnumeration * repl() const { + return new SuggestReplEnumeration(repls_.pbegin(), repls_.pend());} + + // + // + // + + WordInfo get_word_info(ParmStr str) const; + + // + // fix_case + // + + CasePattern case_pattern(ParmStr str) const; + + CasePattern case_pattern(const char * str, unsigned size) const; + + void fix_case(CasePattern case_pattern, char * str) + { + if (!str[0]) return; + if (case_pattern == AllUpper) to_upper(str,str); + else if (case_pattern == FirstUpper) *str = to_title(*str); + } + void fix_case(CasePattern case_pattern, + char * res, const char * str) const; + const char * fix_case(CasePattern case_pattern, + const char * str, String & buf) const; + + // + // for cache + // + + static inline PosibErr<Language *> get_new(const String & lang, const Config * config) { + StackPtr<Language> l(new Language()); + RET_ON_ERR(l->setup(lang, config)); + return l.release(); + } + + bool cache_key_eq(const String & l) const {return name_ == l;} + }; + + typedef Language LangImpl; + + struct MsgConv : public ConvP + { + MsgConv(const Language * l) : ConvP(l->mesg_conv()) {} + MsgConv(const Language & l) : ConvP(l.mesg_conv()) {} + }; + + struct InsensitiveCompare { + // compares to strings without regards to casing or special characters + const Language * lang; + InsensitiveCompare(const Language * l = 0) : lang(l) {} + operator bool () const {return lang;} + int operator() (const char * a, const char * b) const + { + char x, y; + for (;;) + { + while (x = lang->to_clean(*a++), !x); + while (y = lang->to_clean(*b++), !y); + if (x == 0x10 || y == 0x10 || x != y) break; + } + return static_cast<unsigned char>(x) - static_cast<unsigned char>(y); + } + }; + + struct InsensitiveEqual { + InsensitiveCompare cmp; + InsensitiveEqual(const Language * l = 0) : cmp(l) {} + bool operator() (const char * a, const char * b) const + { + return cmp(a,b) == 0; + } + }; + + struct InsensitiveHash { + // hashes a string without regards to casing or special begin + // or end characters + const Language * lang; + InsensitiveHash() {} + InsensitiveHash(const Language * l) + : lang(l) {} + size_t operator() (const char * s) const + { + size_t h = 0; + for (;;) { + if (*s == 0) break; + unsigned char c = lang->to_clean(*s++); + if (c) h=5*h + c; + } + return h; + } + }; + + struct SensitiveCompare { + const Language * lang; + bool case_insensitive; + bool ignore_accents; + bool begin; + bool end; + SensitiveCompare(const Language * l = 0) + : lang(l), case_insensitive(false), ignore_accents(false), + begin(true), end(true) {} + bool operator() (const char * word, const char * inlist) const; + }; + + struct CleanAffix { + const Language * lang; + OStream * log; + MsgConv msgconv1; + MsgConv msgconv2; + CleanAffix(const Language * lang0, OStream * log0); + char * operator() (ParmStr word, char * aff); + }; + + class WordListIterator + { + public: + struct Value { + SimpleString word; + SimpleString aff; + }; + WordListIterator(StringEnumeration * in, + const Language * lang, + OStream * log); + // init may set "norm-strict" to true which is why it is not const + PosibErr<void> init (Config & config); + const Value * operator-> () const {return &val;} + PosibErr<bool> adv(); + private: + bool have_affix; + bool validate_words; + bool validate_affixes; + bool clean_words; + bool skip_invalid_words; + bool clean_affixes; + StringEnumeration * in; + const Language * lang; + ConvEC iconv; + OStream * log; + Value val; + String data; + const char * orig; + char * str; + char * str_end; + char brk[3]; + CleanAffix clean_affix; + }; + + String get_stripped_chars(const Language & l); + + String get_clean_chars(const Language & l); + + PosibErr<void> check_if_valid(const Language & l, ParmStr word); + PosibErr<void> validate_affix(const Language & l, ParmStr word, ParmStr aff); + + bool find_language(Config & c); + + PosibErr<Language *> new_language(const Config &, ParmStr lang = 0); + + PosibErr<void> open_affix_file(const Config &, FStream & o); +} + + +#endif diff --git a/jni/modules/speller/default/language.lo b/jni/modules/speller/default/language.lo new file mode 100644 index 0000000..509f780 --- /dev/null +++ b/jni/modules/speller/default/language.lo @@ -0,0 +1,12 @@ +# modules/speller/default/language.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/language.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/leditdist.cpp b/jni/modules/speller/default/leditdist.cpp new file mode 100644 index 0000000..9d89cfa --- /dev/null +++ b/jni/modules/speller/default/leditdist.cpp @@ -0,0 +1,308 @@ + +#include "leditdist.hpp" + +// The basic algorithm is as follows: +// +// Let A[n] represent the nth character of string n +// A[n..] represent the substring of A starting at n +// if n > length of A then it is considered an empty string +// +// edit_distance(A,B,limit) = ed(A,B,0) +// where ed(A,B,d) = d if A & B is empty. +// = infinity if d > limit +// = ed(A[2..],B[2..], d) if A[1] == B[1] +// = min ( ed(A[2..],B[2..], d+1), +// ed(A, B[2..], d+1), +// ed(A[2..],B, d+1) ) otherwise +// +// However, the code below: +// 1) Also allows for swaps +// 2) Allow weights to be attached to each edit +// 3) Is not recursive, it uses a loop when it is tail recursion +// and a small stack otherwise. The stack will NEVER be larger +// then 2 * limit. +// 4) Is extremely optimized + + +#define check_rest(a,b,s) \ + a0 = a; b0 = b; \ + while (*a0 == *b0) { \ + if (*a0 == '\0') { \ + if (s < min) min = s; \ + break; \ + } \ + ++a0; ++b0; \ + } + +namespace aspeller { + + int limit_edit_distance(const char * a, const char * b, + int limit, const EditDistanceWeights & w) + { + limit = limit*w.max; + static const int size = 10; + struct Edit { + const char * a; + const char * b; + int score; + }; + Edit begin[size]; + Edit * i = begin; + const char * a0; + const char * b0; + int score = 0; + int min = LARGE_NUM; + + while (true) { + + while (*a == *b) { + if (*a == '\0') { + if (score < min) min = score; + goto FINISH; + } + ++a; ++b; + } + + if (*a == '\0') { + + do { + score += w.del2; + if (score >= min) goto FINISH; + ++b; + } while (*b != '\0'); + min = score; + + } else if (*b == '\0') { + + do { + score += w.del1; + if (score >= min) goto FINISH; + ++a; + } while (*a != '\0'); + min = score; + + } else { + + if (score + w.max <= limit) { + if (limit*w.min <= w.max*(w.min+score)) { + // if floor(score/max)=limit/max-1 then this edit is only good + // if it makes the rest of the string match. So check if + // the rest of the string matches to avoid the overhead of + // pushing it on then off the stack + + // delete a character from a + check_rest(a+1,b,score + w.del1); + + // delete a character from b + check_rest(a,b+1,score + w.del2); + + if (*a == *(b+1) && *b == *(a+1)) { + + // swap two characters + check_rest(a+2,b+2, score + w.swap); + + } else { + + // substitute one character for another which is the same + // thing as deleting a character from both a & b + check_rest(a+1,b+1, score + w.sub); + + } + + } else { + + // delete a character from a + i->a = a + 1; + i->b = b; + i->score = score + w.del1; + ++i; + + // delete a character from b + i->a = a; + i->b = b + 1; + i->score = score + w.del2; + ++i; + + // If two characters can be swapped and make a match + // then the substitution is pointless. + // Also, there is no need to push this on the stack as + // it is going to be imminently removed. + if (*a == *(b+1) && *b == *(a+1)) { + + // swap two characters + a = a + 2; + b = b + 2; + score += w.swap; + continue; + + } else { + + // substitute one character for another which is the same + // thing as deleting a character from both a & b + a = a + 1; + b = b + 1; + score += w.sub; + continue; + + } + } + } + } + FINISH: + if (i == begin) return min; + --i; + a = i->a; + b = i->b; + score = i->score; + } + } + +#undef check_rest +#define check_rest(a,b,w) \ + a0 = a; b0 = b; \ + while(*a0 == *b0) { \ + if (*a0 == '\0') { \ + if (w < min) min = w; \ + break; \ + } \ + ++a0; \ + ++b0; \ + } \ + if (amax < a0) amax = a0; + +#define check2(a,b,w) \ + aa = a; bb = b; \ + while(*aa == *bb) { \ + if (*aa == '\0') { \ + if (amax < aa) amax = aa; \ + if (w < min) min = w; \ + break; \ + } \ + ++aa; ++bb; \ + } \ + if (*aa == '\0') { \ + if (amax < aa) amax = aa; \ + if (*bb == '\0') {} \ + else if (*(bb+1) == '\0' && w+ws.del2 < min) min = w+ws.del2; \ + } else if (*bb == '\0') { \ + ++aa; \ + if (amax < aa) amax = aa; \ + if (*aa == '\0' && w+ws.del1 < min) min = w+ws.del1; \ + } else { \ + check_rest(aa+1,bb,w+ws.del1); \ + check_rest(aa,bb+1,w+ws.del2); \ + if (*aa == *(bb+1) && *bb == *(aa+1)) { \ + check_rest(aa+2,bb+2,w+ws.swap); \ + } else { \ + check_rest(aa+1,bb+1,w+ws.sub); \ + } \ + } + + EditDist limit1_edit_distance(const char * a, const char * b, + const EditDistanceWeights & ws) + { + int min = LARGE_NUM; + const char * a0; + const char * b0; + const char * amax = a; + + while(*a == *b) { + if (*a == '\0') + return EditDist(0, a); + ++a; ++b; + } + + if (*a == '\0') { + + ++b; + if (*b == '\0') return EditDist(ws.del2, a); + return EditDist(LARGE_NUM, a); + + } else if (*b == '\0') { + + ++a; + if (*a == '\0') return EditDist(ws.del1, a); + return EditDist(LARGE_NUM, a); + + } else { + + // delete a character from a + check_rest(a+1,b,ws.del1); + + // delete a character from b + check_rest(a,b+1,ws.del2); + + if (*a == *(b+1) && *b == *(a+1)) { + + // swap two characters + check_rest(a+2,b+2,ws.swap); + + } else { + + // substitute one character for another which is the same + // thing as deleting a character from both a & b + check_rest(a+1,b+1,ws.sub); + + } + } + return EditDist(min, amax); + } + + EditDist limit2_edit_distance(const char * a, const char * b, + const EditDistanceWeights & ws) + { + int min = LARGE_NUM; + const char * a0; + const char * b0; + const char * aa; + const char * bb; + const char * amax = a; + + while(*a == *b) { + if (*a == '\0') + return EditDist(0, a); + ++a; ++b; + } + + if (*a == '\0') { + + ++b; + if (*b == '\0') return EditDist(ws.del2, a); + ++b; + if (*b == '\0') return EditDist(2*ws.del2, a); + return EditDist(LARGE_NUM, a); + + } else if (*b == '\0') { + + ++a; + if (*a == '\0') return EditDist(ws.del1, a); + ++a; + if (*a == '\0') return EditDist(2*ws.del1, a); + return EditDist(LARGE_NUM, a); + + } else { + + // delete a character from a + check2(a+1,b,ws.del1); + + // delete a character from b + check2(a,b+1,ws.del2); + + if (*a == *(b+1) && *b == *(a+1)) { + + // swap two characters + check2(a+2,b+2,ws.swap); + + } else { + + // substitute one character for another which is the same + // thing as deleting a character from both a & b + check2(a+1,b+1,ws.sub); + + } + } + return EditDist(min, amax); + } +} + + diff --git a/jni/modules/speller/default/leditdist.hpp b/jni/modules/speller/default/leditdist.hpp new file mode 100644 index 0000000..ba5230b --- /dev/null +++ b/jni/modules/speller/default/leditdist.hpp @@ -0,0 +1,68 @@ + +#ifndef __aspeller_leditdist_hh__ +#define __aspeller_leditdist_hh__ + +#include "weights.hpp" + +namespace aspeller { + + // limit_edit_distance finds the shortest edit distance but will + // stop and return a number at least as large as LARGE_NUM if it has + // to do more edits than a set limit. + // Note that this does NOT mean that the score returned is <= limit*w.max + // as "sub" vs "submarine" will return 6*(cost of insertion) no matter what + // the limit is. + // The edit distance is + // (cost of swap)(# of swaps) + (cost of deletion)(# of deletions) + // + (cost of insertion)(# of insertions) + // + (cost of substitutions)(# of substitutions) + + // Preconditions: + // max(strlen(a), strlen(b))*max(of the edit weights) <= 2^15 + // if violated than an incorrect result may be returned (which may be negative) + // due to overflow of a short integer + // (limit+1)*w.min < limit*w.max + // limit <= 5 (use edit_distance if limit > 5) + // where w.min and w.max is the minimum and maximum cost of an edit + // respectfully. + + // The running time is asymptotically bounded above by + // (3^l)*n where l is the limit and n is the maxium of strlen(a),strlen(b) + // Based on my informal tests, however, the n does not really matter + // and the running time is more like (3^l). + + // limit_edit_distance, based on my informal tests, turns out to be + // faster than edit_dist for l < 5. For l == 5 it is about the + // smaller for short strings (<= 5) and less than for longer strings + + // limit2_edit_distance(a,b,w) = limit_edit_distance(a,b,2,w) + // but is roughly 2/3's faster + + struct EditDist { + int score; + const char * stopped_at; + EditDist() {} + EditDist(int s, const char * p) + : score(s), stopped_at(p) {} + operator int () const {return score;} + }; + + static const int LARGE_NUM = 0xFFFFF; + // this needs to be SMALLER than INT_MAX since it may be incremented + // a few times + + int limit_edit_distance(const char * a, const char * b, int limit, + const EditDistanceWeights & w + = EditDistanceWeights()); + + EditDist limit1_edit_distance(const char * a, const char * b, + const EditDistanceWeights & w + = EditDistanceWeights()); + + EditDist limit2_edit_distance(const char * a, const char * b, + const EditDistanceWeights & w + = EditDistanceWeights()); + +} + +#endif diff --git a/jni/modules/speller/default/leditdist.lo b/jni/modules/speller/default/leditdist.lo new file mode 100644 index 0000000..7288e66 --- /dev/null +++ b/jni/modules/speller/default/leditdist.lo @@ -0,0 +1,12 @@ +# modules/speller/default/leditdist.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/leditdist.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/matrix.hpp b/jni/modules/speller/default/matrix.hpp new file mode 100644 index 0000000..9f46f29 --- /dev/null +++ b/jni/modules/speller/default/matrix.hpp @@ -0,0 +1,22 @@ +#ifndef __aspeller_matrix_hh__ +#define __aspeller_matrix_hh__ + +#include <vector> + +namespace aspeller { + + class ShortMatrix { + int x_size; + int y_size; + short * data; + public: + void init(int sx, int sy, short * d) {x_size = sx; y_size = sy; data = d;} + ShortMatrix() {} + ShortMatrix(int sx, int sy, short * d) {init(sx,sy,d);} + short operator() (int x, int y) const {return data[x + y*x_size];} + short & operator() (int x, int y) {return data[x + y*x_size];} + }; + +} + +#endif diff --git a/jni/modules/speller/default/multi_ws.cpp b/jni/modules/speller/default/multi_ws.cpp new file mode 100644 index 0000000..5c4935d --- /dev/null +++ b/jni/modules/speller/default/multi_ws.cpp @@ -0,0 +1,88 @@ + +#include "config.hpp" +#include "data.hpp" +#include "file_util.hpp" +#include "fstream.hpp" +#include "getdata.hpp" +#include "string.hpp" +#include "parm_string.hpp" +#include "errors.hpp" +#include "vector.hpp" + +#include "gettext.h" + +namespace { + + using namespace acommon; + using namespace aspeller; + + typedef Vector<Dict *> Wss; + + class MultiDictImpl : public Dictionary + { + public: + MultiDictImpl() : Dictionary(multi_dict, "MultiDictImpl") {} + PosibErr<void> load(ParmString, Config &, DictList *, SpellerImpl *); + DictsEnumeration * dictionaries() const; + private: + Wss wss; + }; + + PosibErr<void> MultiDictImpl::load(ParmString fn, + Config & config, + DictList * new_dicts, + SpellerImpl * speller) + { + String dir = figure_out_dir("",fn); + FStream in; + RET_ON_ERR(in.open(fn, "r")); + set_file_name(fn); + String buf; DataPair d; + while(getdata_pair(in, d, buf)) + { + if (d.key == "add") { + + RET_ON_ERR_SET(add_data_set(d.value, config, new_dicts, speller, dir), Dict *, res); + RET_ON_ERR(set_check_lang(res->lang()->name(), config)); + wss.push_back(res); + + } else { + + return make_err(unknown_key, d.key).with_file(fn, d.line_num); + + } + } + + if (wss.empty()) { + return make_err(bad_file_format, fn, + _("There must be at least one \"add\" line.")); + } + + return no_err; + } + + struct Parms + { + typedef Dict * Value; + typedef Wss::const_iterator Iterator; + Iterator end; + Parms(Iterator e) : end(e) {} + bool endf(Iterator i) const {return i == end;} + Value end_state() const {return 0;} + Value deref(Iterator i) const {return *i;} + }; + + DictsEnumeration * MultiDictImpl::dictionaries() const + { + return new MakeEnumeration<Parms>(wss.begin(), wss.end()); + } +} + +namespace aspeller { + + MultiDict * new_default_multi_dict() + { + return new MultiDictImpl(); + } + +} diff --git a/jni/modules/speller/default/multi_ws.lo b/jni/modules/speller/default/multi_ws.lo new file mode 100644 index 0000000..289ffa0 --- /dev/null +++ b/jni/modules/speller/default/multi_ws.lo @@ -0,0 +1,12 @@ +# modules/speller/default/multi_ws.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/multi_ws.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/phonet.cpp b/jni/modules/speller/default/phonet.cpp new file mode 100644 index 0000000..281aed4 --- /dev/null +++ b/jni/modules/speller/default/phonet.cpp @@ -0,0 +1,472 @@ +/* phonetic.c - generic replacement aglogithms for phonetic transformation + Copyright (C) 2000 Bjrn Jacke + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation; + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Bjrn Jacke may be reached by email at bjoern.jacke@gmx.de + + Changelog: + + 2000-01-05 Bjrn Jacke <bjoern.jacke@gmx.de> + Initial Release insprired by the article about phonetic + transformations out of c't 25/1999 + +*/ + +#include <string.h> +#include <assert.h> + +#include <vector> + +#include "asc_ctype.hpp" +#include "string.hpp" +#include "phonet.hpp" +#include "errors.hpp" +#include "fstream.hpp" +#include "getdata.hpp" +#include "language.hpp" +#include "objstack.hpp" +#include "vararray.hpp" + +using namespace acommon; + +namespace aspeller { + + const char * const PhonetParms::rules_end = ""; + + static bool to_bool(const String & str) { + if (str == "1" || str == "true") return true; + else return false; + } +#if 0 + void dump_phonet_rules(ostream & out, const PhonetParms & parms) { + out << "version " << parms.version << "\n"; + out << "followup " << parms.followup << "\n"; + out << "collapse_result " << parms.collapse_result << "\n"; + out << "\n"; + ios::fmtflags flags = out.setf(ios::left); + for (int i = 0; parms.rules[i] != PhonetParms::rules_end; i += 2) { + out << setw(20) << parms.rules[i] << " " + << (parms.rules[i+1][0] == '\0' ? "_" : parms.rules[i+1]) + << "\n"; + } + out.flags(flags); + } +#endif + + struct PhonetParmsImpl : public PhonetParms { + void * data; + ObjStack strings; + PhonetParmsImpl() : data(0) {} + ~PhonetParmsImpl() {if (data) free(data);} + }; + + static void init_phonet_hash(PhonetParms & parms); + + // like strcpy but safe if the strings overlap + // but only if dest < src + static inline void strmove(char * dest, char * src) { + while (*src) + *dest++ = *src++; + *dest = '\0'; + } + + PosibErr<PhonetParms *> new_phonet(const String & file, + Conv & iconv, + const Language * lang) + { + String buf; DataPair dp; + + FStream in; + RET_ON_ERR(in.open(file, "r")); + + PhonetParmsImpl * parms = new PhonetParmsImpl(); + + parms->lang = lang; + + parms->followup = true; + parms->collapse_result = false; + parms->remove_accents = true; + + int num = 0; + while (getdata_pair(in, dp, buf)) { + if (dp.key != "followup" && dp.key != "collapse_result" && + dp.key != "version") + ++num; + } + + in.restart(); + + size_t vsize = sizeof(char *) * (2 * num + 2); + parms->data = malloc(vsize); + + const char * * r = (const char * *)parms->data; + + char * empty_str = parms->strings.dup(""); + + while (true) { + if (!getdata_pair(in, dp, buf)) break; + if (dp.key == "followup") { + parms->followup = to_bool(dp.value); + } else if (dp.key == "collapse_result") { + parms->collapse_result = to_bool(dp.value); + } else if (dp.key == "version") { + parms->version = dp.value; + } else if (dp.key == "remove_accents") { + parms->remove_accents = to_bool(dp.value); + } else { + *r = parms->strings.dup(iconv(dp.key)); + ++r; + if (dp.value == "_") { + *r = empty_str; + } else { + *r = parms->strings.dup(iconv(dp.value)); + } + ++r; + } + } + if (parms->version.empty()) { + delete parms; + return make_err(bad_file_format, file, "You must specify a version string"); + } + *(r ) = PhonetParms::rules_end; + *(r+1) = PhonetParms::rules_end; + parms->rules = (const char * *)parms->data; + + + for (unsigned i = 0; i != 256; ++i) { + parms->to_clean[i] = (lang->char_type(i) > Language::NonLetter + ? (parms->remove_accents + ? lang->to_upper(lang->de_accent(i)) + : lang->to_upper(i)) + : 0); + } + + init_phonet_hash(*parms); + + return parms; + } + + static void init_phonet_hash(PhonetParms & parms) + { + int i, k; + + for (i = 0; i < parms.hash_size; i++) { + parms.hash[i] = -1; + } + + for (i = 0; parms.rules[i] != PhonetParms::rules_end; i += 2) { + /** set hash value **/ + k = (unsigned char) parms.rules[i][0]; + + if (parms.hash[k] < 0) { + parms.hash[k] = i; + } + } + } + + +#ifdef PHONET_TRACE + void trace_info(char * text, int n, char * error, + const PhonetParms & parms) + { + /** dump tracing info **/ + + printf ("%s %d: \"%s\" > \"%s\" %s", text, ((n/2)+1), parms.rules[n], + parms.rules[n+1], error); + } +#endif + + int phonet (const char * inword, char * target, + int len, + const PhonetParms & parms) + { + /** Do phonetic transformation. **/ + /** "len" = length of "inword" incl. '\0'. **/ + + /** result: >= 0: length of "target" **/ + /** otherwise: error **/ + + int i,j,k=0,n,p,z; + int k0,n0,p0=-333,z0; + if (len == -1) len = strlen(inword); + VARARRAY(char, word, len + 1); + char c, c0; + const char * s; + + typedef unsigned char uchar; + + /** to convert string to uppercase and possible remove accents **/ + char * res = word; + for (const char * str = inword; *str; ++str) { + char c = parms.to_clean[(uchar)*str]; + if (c) *res++ = c; + } + *res = '\0'; + + /** check word **/ + i = j = z = 0; + while ((c = word[i]) != '\0') { + #ifdef PHONET_TRACE + cout << "\nChecking position " << j << ": word = \"" + << word+i << "\","; + printf (" target = \"%.*s\"", j, target); + #endif + n = parms.hash[(uchar) c]; + z0 = 0; + + if (n >= 0) { + /** check all rules for the same letter **/ + while (parms.rules[n][0] == c) { + #ifdef PHONET_TRACE + trace_info ("\n> Checking rule No.",n,"",parms); + #endif + + /** check whole string **/ + k = 1; /** number of found letters **/ + p = 5; /** default priority **/ + s = parms.rules[n]; + s++; /** important for (see below) "*(s-1)" **/ + + while (*s != '\0' && word[i+k] == *s + && !asc_isdigit (*s) && strchr ("(-<^$", *s) == NULL) { + k++; + s++; + } + if (*s == '(') { + /** check letters in "(..)" **/ + if (parms.lang->is_alpha(word[i+k]) // ...could be implied? + && strchr(s+1, word[i+k]) != NULL) { + k++; + while (*s != ')') + s++; + s++; + } + } + p0 = (int) *s; + k0 = k; + while (*s == '-' && k > 1) { + k--; + s++; + } + if (*s == '<') + s++; + if (asc_isdigit (*s)) { + /** determine priority **/ + p = *s - '0'; + s++; + } + if (*s == '^' && *(s+1) == '^') + s++; + + if (*s == '\0' + || (*s == '^' + && (i == 0 || ! parms.lang->is_alpha(word[i-1])) + && (*(s+1) != '$' + || (! parms.lang->is_alpha(word[i+k0]) ))) + || (*s == '$' && i > 0 + && parms.lang->is_alpha(word[i-1]) + && (! parms.lang->is_alpha(word[i+k0]) ))) + { + /** search for followup rules, if: **/ + /** parms.followup and k > 1 and NO '-' in searchstring **/ + c0 = word[i+k-1]; + n0 = parms.hash[(uchar) c0]; +// + if (parms.followup && k > 1 && n0 >= 0 + && p0 != (int) '-' && word[i+k] != '\0') { + /** test follow-up rule for "word[i+k]" **/ + while (parms.rules[n0][0] == c0) { + #ifdef PHONET_TRACE + trace_info ("\n> > follow-up rule No.",n0,"... ",parms); + #endif + + /** check whole string **/ + k0 = k; + p0 = 5; + s = parms.rules[n0]; + s++; + while (*s != '\0' && word[i+k0] == *s + && ! asc_isdigit(*s) && strchr("(-<^$",*s) == NULL) { + k0++; + s++; + } + if (*s == '(') { + /** check letters **/ + if (parms.lang->is_alpha(word[i+k0]) + && strchr (s+1, word[i+k0]) != NULL) { + k0++; + while (*s != ')' && *s != '\0') + s++; + if (*s == ')') + s++; + } + } + while (*s == '-') { + /** "k0" gets NOT reduced **/ + /** because "if (k0 == k)" **/ + s++; + } + if (*s == '<') + s++; + if (asc_isdigit (*s)) { + p0 = *s - '0'; + s++; + } + + if (*s == '\0' + /** *s == '^' cuts **/ + || (*s == '$' && ! parms.lang->is_alpha(word[i+k0]))) + { + if (k0 == k) { + /** this is just a piece of the string **/ + #ifdef PHONET_TRACE + cout << "discarded (too short)"; + #endif + n0 += 2; + continue; + } + + if (p0 < p) { + /** priority too low **/ + #ifdef PHONET_TRACE + cout << "discarded (priority)"; + #endif + n0 += 2; + continue; + } + /** rule fits; stop search **/ + break; + } + #ifdef PHONET_TRACE + cout << "discarded"; + #endif + n0 += 2; + } /** End of "while (parms.rules[n0][0] == c0)" **/ + + if (p0 >= p && parms.rules[n0][0] == c0) { + #ifdef PHONET_TRACE + trace_info ("\n> Rule No.", n,"",parms); + trace_info ("\n> not used because of follow-up", + n0,"",parms); + #endif + n += 2; + continue; + } + } /** end of follow-up stuff **/ + + /** replace string **/ + #ifdef PHONET_TRACE + trace_info ("\nUsing rule No.", n,"\n",parms); + #endif + s = parms.rules[n+1]; + p0 = (parms.rules[n][0] != '\0' + && strchr (parms.rules[n]+1,'<') != NULL) ? 1:0; + if (p0 == 1 && z == 0) { + /** rule with '<' is used **/ + if (j > 0 && *s != '\0' + && (target[j-1] == c || target[j-1] == *s)) { + j--; + } + z0 = 1; + z = 1; + k0 = 0; + while (*s != '\0' && word[i+k0] != '\0') { + word[i+k0] = *s; + k0++; + s++; + } + if (k > k0) + strmove (&word[0]+i+k0, &word[0]+i+k); + + /** new "actual letter" **/ + c = word[i]; + } + else { /** no '<' rule used **/ + i += k - 1; + z = 0; + while (*s != '\0' + && *(s+1) != '\0' && j < len) { + if (j == 0 || target[j-1] != *s) { + target[j] = *s; + j++; + } + s++; + } + /** new "actual letter" **/ + c = *s; + if (parms.rules[n][0] != '\0' + && strstr (parms.rules[n]+1, "^^") != NULL) { + if (c != '\0') { + target[j] = c; + j++; + } + strmove (&word[0], &word[0]+i+1); + i = 0; + z0 = 1; + } + } + break; + } /** end of follow-up stuff **/ + n += 2; + } /** end of while (parms.rules[n][0] == c) **/ + } /** end of if (n >= 0) **/ + if (z0 == 0) { + if (k && (assert(p0!=-333),!p0) && j < len && c != '\0' + && (!parms.collapse_result || j == 0 || target[j-1] != c)){ + /** condense only double letters **/ + target[j] = c; + ///printf("\n setting \n"); + j++; + } + #ifdef PHONET_TRACE + else if (p0 || !k) + cout << "\nNo rule found; character \"" << word[i] << "\" skipped\n"; + #endif + + i++; + z = 0; + k=0; + } + } /** end of while ((c = word[i]) != '\0') **/ + + target[j] = '\0'; + return (j); + + } /** end of function "phonet" **/ +} + +#if 0 + +int main (int argc, char *argv[]) { + using namespace autil; + + if (argc < 3) { + printf ("Usage: phonet <data file> <word>\n"); + return(1); + } + + char phone_word[strlen(argv[2])+1]; /** max possible length of words **/ + + PhonetParms * parms; + ifstream f(argv[1]); + parms = load_phonet_rules(f); + + init_phonet_charinfo(*parms); + init_phonet_hash(*parms); + phonet (argv[2],phone_word,*parms); + printf ("%s\n", phone_word); + return(0); +} +#endif diff --git a/jni/modules/speller/default/phonet.hpp b/jni/modules/speller/default/phonet.hpp new file mode 100644 index 0000000..8c24b75 --- /dev/null +++ b/jni/modules/speller/default/phonet.hpp @@ -0,0 +1,70 @@ +/* phonetic.c - generic replacement aglogithms for phonetic transformation + Copyright (C) 2000 Bjrn Jacke + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License version 2.1 as published by the Free Software Foundation; + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Bjrn Jacke may be reached by email at bjoern.jacke@gmx.de +*/ + +#ifndef ASPELLER_PHONET__HPP +#define ASPELLER_PHONET__HPP + +#include "string.hpp" +#include "posib_err.hpp" + +using namespace acommon; + +namespace acommon {struct Conv;} + +namespace aspeller { + + class Language; + + struct PhonetParms { + String version; + + bool followup; + bool collapse_result; + + bool remove_accents; + + static const char * const rules_end; + const char * * rules; + + const Language * lang; + + char to_clean[256]; + + static const int hash_size = 256; + int hash[hash_size]; + + virtual ~PhonetParms() {} + }; + + int phonet (const char * inword, char * target, + int len, + const PhonetParms & parms); + +#if 0 + void dump_phonet_rules(std::ostream & out, const PhonetParms & parms); + // the istream must be seekable +#endif + + PosibErr<PhonetParms *> new_phonet(const String & file, + Conv & iconv, + const Language * lang); + +} + +#endif diff --git a/jni/modules/speller/default/phonet.lo b/jni/modules/speller/default/phonet.lo new file mode 100644 index 0000000..0cdf1b4 --- /dev/null +++ b/jni/modules/speller/default/phonet.lo @@ -0,0 +1,12 @@ +# modules/speller/default/phonet.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/phonet.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/phonetic.cpp b/jni/modules/speller/default/phonetic.cpp new file mode 100644 index 0000000..410b58c --- /dev/null +++ b/jni/modules/speller/default/phonetic.cpp @@ -0,0 +1,208 @@ +// Copyright 2000 by Kevin Atkinson under the terms of the LGPL + +#include "language.hpp" +#include "phonetic.hpp" +#include "phonet.hpp" + +#include "file_util.hpp" +#include "file_data_util.hpp" +#include "clone_ptr-t.hpp" + +namespace aspeller { + + class SimpileSoundslike : public Soundslike { + private: + const Language * lang; + char first[256]; + char rest[256]; + public: + SimpileSoundslike(const Language * l) : lang(l) {} + + PosibErr<void> setup(Conv &) { + memcpy(first, lang->sl_first_, 256); + memcpy(rest, lang->sl_rest_, 256); + return no_err; + } + + String soundslike_chars() const { + bool chars_set[256] = {0}; + for (int i = 0; i != 256; ++i) + { + char c = first[i]; + if (c) chars_set[static_cast<unsigned char>(c)] = true; + c = rest[i]; + if (c) chars_set[static_cast<unsigned char>(c)] = true; + } + String chars_list; + for (int i = 0; i != 256; ++i) + { + if (chars_set[i]) + chars_list += static_cast<char>(i); + } + return chars_list; + } + + char * to_soundslike(char * res, const char * str, int size) const + { + char prev, cur = '\0'; + + const char * i = str; + while (*i) { + cur = first[static_cast<unsigned char>(*i++)]; + if (cur) {*res++ = cur; break;} + } + prev = cur; + + while (*i) { + cur = rest[static_cast<unsigned char>(*i++)]; + if (cur && cur != prev) *res++ = cur; + prev = cur; + } + *res = '\0'; + return res; + } + + const char * name () const { + return "simple"; + } + const char * version() const { + return "2.0"; + } + }; + + class NoSoundslike : public Soundslike { + private: + const Language * lang; + public: + NoSoundslike(const Language * l) : lang(l) {} + + PosibErr<void> setup(Conv &) {return no_err;} + + String soundslike_chars() const { + return get_clean_chars(*lang); + } + + char * to_soundslike(char * res, const char * str, int size) const + { + return lang->LangImpl::to_clean(res, str); + } + + const char * name() const { + return "none"; + } + const char * version() const { + return "1.0"; + } + }; + + class StrippedSoundslike : public Soundslike { + private: + const Language * lang; + public: + StrippedSoundslike(const Language * l) : lang(l) {} + + PosibErr<void> setup(Conv &) {return no_err;} + + String soundslike_chars() const { + return get_stripped_chars(*lang); + } + + char * to_soundslike(char * res, const char * str, int size) const + { + return lang->LangImpl::to_stripped(res, str); + } + + const char * name() const { + return "stripped"; + } + const char * version() const { + return "1.0"; + } + }; + + class PhonetSoundslike : public Soundslike { + + const Language * lang; + StackPtr<PhonetParms> phonet_parms; + + public: + + PhonetSoundslike(const Language * l) : lang(l) {} + + PosibErr<void> setup(Conv & iconv) { + String file; + file += lang->data_dir(); + file += '/'; + file += lang->name(); + file += "_phonet.dat"; + PosibErr<PhonetParms *> pe = new_phonet(file, iconv, lang); + if (pe.has_err()) return pe; + phonet_parms.reset(pe); + return no_err; + } + + + String soundslike_chars() const + { + bool chars_set[256] = {0}; + String chars_list; + for (const char * * i = phonet_parms->rules + 1; + *(i-1) != PhonetParms::rules_end; + i += 2) + { + for (const char * j = *i; *j; ++j) + { + chars_set[static_cast<unsigned char>(*j)] = true; + } + } + for (int i = 0; i != 256; ++i) + { + if (chars_set[i]) + chars_list += static_cast<char>(i); + } + return chars_list; + } + + char * to_soundslike(char * res, const char * str, int size) const + { + int new_size = phonet(str, res, size, *phonet_parms); + return res + new_size; + } + + const char * name() const + { + return "phonet"; + } + const char * version() const + { + return phonet_parms->version.c_str(); + } + }; + + + PosibErr<Soundslike *> new_soundslike(ParmString name, + Conv & iconv, + const Language * lang) + { + Soundslike * sl; + if (name == "simple" || name == "generic") { + sl = new SimpileSoundslike(lang); + } else if (name == "stripped") { + sl = new StrippedSoundslike(lang); + } else if (name == "none") { + sl = new NoSoundslike(lang); + } else if (name == lang->name()) { + sl = new PhonetSoundslike(lang); + } else { + abort(); // FIXME + } + PosibErrBase pe = sl->setup(iconv); + if (pe.has_err()) { + delete sl; + return pe; + } else { + return sl; + } + } +} + diff --git a/jni/modules/speller/default/phonetic.hpp b/jni/modules/speller/default/phonetic.hpp new file mode 100644 index 0000000..9c5fe0a --- /dev/null +++ b/jni/modules/speller/default/phonetic.hpp @@ -0,0 +1,32 @@ +// Copyright 2000 by Kevin Atkinson under the terms of the LGPL + +#ifndef __aspeller_phonetic__ +#define __aspeller_phonetic__ + +#include "string.hpp" + +using namespace acommon; + +namespace acommon {struct Conv;} + +namespace aspeller { + + class Language; + + class Soundslike { + public: + virtual String soundslike_chars() const = 0; + // string must be null terminated even if len is given + virtual char * to_soundslike(char *, const char *, int len = -1) const = 0; + virtual const char * name() const = 0; + virtual const char * version() const = 0; + virtual PosibErr<void> setup(Conv &) = 0; + virtual ~Soundslike() {} + }; + + PosibErr<Soundslike *> new_soundslike(ParmString name, + Conv & conv, + const Language * lang); +}; + +#endif diff --git a/jni/modules/speller/default/phonetic.lo b/jni/modules/speller/default/phonetic.lo new file mode 100644 index 0000000..35b6317 --- /dev/null +++ b/jni/modules/speller/default/phonetic.lo @@ -0,0 +1,12 @@ +# modules/speller/default/phonetic.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/phonetic.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/primes.cpp b/jni/modules/speller/default/primes.cpp new file mode 100644 index 0000000..1422097 --- /dev/null +++ b/jni/modules/speller/default/primes.cpp @@ -0,0 +1,51 @@ +// Copyright (c) 2000 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#include "primes.hpp" +#include <cmath> +#include <cassert> + +namespace aspeller { + + using namespace std; + + void Primes::resize(size_type s) { + size_type i, j = 2; + data.resize(s); + for(i = 0; i < s; ++i) + data[i] = true; + if (s > 0) + data[0] = false; + if (s > 1) + data[1] = false; + size_type sqrt_s = static_cast<size_type>(sqrt(static_cast<double>(s))); + while (j < sqrt_s) { + for (i = 2*j; i < s; i += j) { + data[i] = false; + } + ++j; + for (;j < sqrt_s && !data[j]; ++j); + } + } + + bool Primes::is_prime(size_type n) const { + if (n < size()) { + return data[n]; + } else { + size_type e = static_cast<size_type>(sqrt(static_cast<double>(n))); + assert(e < size()); + for (const_iterator i = begin(); *i <= e; ++i) + if (!(n % *i)) return false; + return true; + } + } +} diff --git a/jni/modules/speller/default/primes.hpp b/jni/modules/speller/default/primes.hpp new file mode 100644 index 0000000..5acd6b4 --- /dev/null +++ b/jni/modules/speller/default/primes.hpp @@ -0,0 +1,129 @@ +// Copyright (c) 2000 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#include <vector> + +namespace aspeller { + + class Primes { + private: + typedef std::vector<bool> Data; + Data data; + public: + typedef Data::size_type size_type; + typedef Data::size_type value_type; + + Primes() {} + Primes(size_type s) {resize(s);} + size_type size() const {return data.size();} + void resize(size_type s); + bool operator[] (size_type pos) const {return data[pos];} + bool is_prime(size_type n) const; + size_type max_num() const {return (size()-1)*(size()-1);} + + // + // Iterators + // + + class const_reverse_iterator; + class const_iterator { + friend class Primes; + friend class const_reverse_iterator; + protected: + size_type pos; + const Primes* data; + const_iterator(const Primes *d, size_type p) {data = d; pos = p;} + public: + const_iterator() {} + size_type operator* () {return pos;} + const_iterator& operator++ () { + size_type size = data->size(); + if (pos != size) + do {++pos;} while (pos != size && !(*data)[pos]); + return *this; + } + const_iterator operator++ (int) { + const_iterator temp = *this; + operator++(); + return temp; + } + const_iterator& operator-- () { + if (pos != 0) + do {--pos;} while (pos != 0 && !(*data)[pos]); + return *this; + } + const_iterator operator-- (int) { + const_iterator temp = *this; + operator--(); + return temp; + } + const_iterator& jump(size_type p) { + pos = p; + if (!(*data)[pos]) + operator++(); + return *this; + } + + inline friend bool operator == (const const_iterator &rhs, + const const_iterator &lhs) { + return rhs.data == lhs.data && rhs.pos == lhs.pos; + } + }; + typedef const_iterator iterator; + + class const_reverse_iterator : private const_iterator { + friend class Primes; + protected: + const_reverse_iterator(const Primes *d, size_type p) {data = d; pos = p;} + public: + const_reverse_iterator() {} + const_reverse_iterator(const const_iterator &other) : + const_iterator(other) {} + size_type operator* () const {return pos;} + const_reverse_iterator& operator++ () {const_iterator::operator--(); return *this;} + const_reverse_iterator operator++ (int){return const_iterator::operator--(1);} + const_reverse_iterator& operator-- () {const_iterator::operator++(); return *this;} + const_reverse_iterator operator-- (int) {return const_iterator::operator++(1); return *this;} + + const_reverse_iterator& jump(size_type p) { + pos = p; + if (!(*data)[pos]) + operator++(); + return *this; + } + + inline friend bool operator == (const const_reverse_iterator &rhs, + const const_reverse_iterator &lhs) { + return rhs.data == lhs.data && rhs.pos == lhs.pos; + } + }; + typedef const_reverse_iterator reverse_iterator; + + typedef Data::const_iterator const_ra_iterator; + typedef const_ra_iterator ra_iterator; + typedef Data::const_reverse_iterator const_reverse_ra_iterator; + typedef const_reverse_ra_iterator reverse_ra_iterator; + + const_iterator begin() const {return const_iterator(this, 2);} + const_iterator end() const {return const_iterator(this, size());} + const_iterator jump(size_type p) {return const_iterator(this,0).jump(p);} + const_reverse_iterator rbegin() const {return ++const_reverse_iterator(this, size());} + const_reverse_iterator rend() const {return const_reverse_iterator(this, 0);} + const_reverse_iterator rjump(size_type p) {return const_reverse_iterator(this,0).jump(p);} + + const_ra_iterator ra_begin() const {return data.begin();} + const_ra_iterator ra_end() const {return data.end();} + const_reverse_ra_iterator r_ra_begin() const {return data.rbegin();} + const_reverse_ra_iterator r_ra_end() const {return data.rend();} + }; + +} diff --git a/jni/modules/speller/default/primes.lo b/jni/modules/speller/default/primes.lo new file mode 100644 index 0000000..75275f2 --- /dev/null +++ b/jni/modules/speller/default/primes.lo @@ -0,0 +1,12 @@ +# modules/speller/default/primes.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/primes.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/readonly_ws.cpp b/jni/modules/speller/default/readonly_ws.cpp new file mode 100644 index 0000000..7724076 --- /dev/null +++ b/jni/modules/speller/default/readonly_ws.cpp @@ -0,0 +1,1191 @@ +// This file is part of The New Aspell +// Copyright (C) 2000-2001,2011 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +// Aspell's main word list is laid out as follows: +// +// * header +// * jump table for editdist 1 +// * jump table for editdist 2 +// * data block +// * hash table + +// data block laid out as follows: +// +// Words: +// (<8 bit frequency><8 bit: flags><8 bit: offset> +// <8 bit: word size><word><null> +// [<affix info><null>][<category info><null>])+ +// Words with soundslike: +// (<8 bit: offset to next item><8 bit: soundslike size><soundslike> +// <words>)+ +// Flags are mapped as follows: +// bits 0-3: word info +// bit 4: duplicate flag +// bit 5: <unused> +// bit 6: have affix info +// bit 7: have compound info + +#include <utility> +using std::pair; + +#include <string.h> +#include <stdio.h> +//#include <errno.h> + +#include "settings.h" + +#include "block_vector.hpp" +#include "config.hpp" +#include "data.hpp" +#include "data_util.hpp" +#include "errors.hpp" +#include "file_util.hpp" +#include "fstream.hpp" +#include "language.hpp" +#include "stack_ptr.hpp" +#include "objstack.hpp" +#include "vector.hpp" +#include "vector_hash-t.hpp" +#include "check_list.hpp" +#include "lsort.hpp" + +#include "iostream.hpp" + +#include "gettext.h" + +typedef unsigned int u32int; +static const u32int u32int_max = (u32int)-1; +typedef unsigned short u16int; +typedef unsigned char byte; + +#ifdef HAVE_MMAP + +// POSIX headers +#include <fcntl.h> +#include <unistd.h> +#include <sys/mman.h> + +#endif + +#ifndef MAP_FAILED +#define MAP_FAILED (-1) +#endif + +#ifdef HAVE_MMAP + +static inline char * mmap_open(unsigned int block_size, + FStream & f, + unsigned int offset) +{ + f.flush(); + int fd = f.file_no(); + return static_cast<char *> + (mmap(NULL, block_size, PROT_READ, MAP_SHARED, fd, offset)); +} + +static inline void mmap_free(char * block, unsigned int size) +{ + munmap(block, size); +} + +#else + +static inline char * mmap_open(unsigned int, + FStream & f, + unsigned int) +{ + return reinterpret_cast<char *>(MAP_FAILED); +} + +static inline void mmap_free(char *, unsigned int) +{ + abort(); +} + +#endif + +static byte HAVE_AFFIX_FLAG = 1 << 7; +static byte HAVE_CATEGORY_FLAG = 1 << 6; + +static byte DUPLICATE_FLAG = 1 << 4; +// this flag is set when there is is more than one word for a +// particulear "clean" word such as "jello" "Jello". It is set on all +// but the last word of the group. Ie, if it is set than the next +// word when converted to its "clean" form equals the same value. + +static byte WORD_INFO_MASK = 0x0F; + +static const int FREQUENCY_INFO_O = 4; +static const int FLAGS_O = 3; +static const int NEXT_O = 2; +static const int WORD_SIZE_O = 1; + +static inline int get_word_size(const char * d) { + return *reinterpret_cast<const byte *>(d - WORD_SIZE_O); +} + +static inline byte get_flags(const char * d) { + return *reinterpret_cast<const byte *>(d - FLAGS_O); +} + +static inline byte get_offset(const char * d) { + return *reinterpret_cast<const byte *>(d - NEXT_O); +} + +static inline const char * get_next(const char * d) { + return d + *reinterpret_cast<const byte *>(d - NEXT_O); +} + +static inline const char * get_sl_words_begin(const char * d) { + return d + *reinterpret_cast<const byte *>(d - WORD_SIZE_O) + 4; + // FIXME: This isn't right when frequency info is stored in the table +} + +// get_next might go past the end so don't JUST compare +// for equality. Ie use while (cur < end) not (cur != end) +static inline const char * get_sl_words_end(const char * d) { + return get_next(d) - 3; +} + +static inline const char * get_affix(const char * d) { + int word_size = get_word_size(d); + if (get_flags(d) & HAVE_AFFIX_FLAG) + return d + word_size + 1; + else + return d + word_size; +} + +static inline const char * get_category(const char * d) { + int word_size = get_word_size(d); + if (get_flags(d) & (HAVE_AFFIX_FLAG | HAVE_CATEGORY_FLAG)) + return d + strlen(d + word_size + 1) + 1; + else if (get_flags(d) & HAVE_CATEGORY_FLAG) + return d + word_size + 1; + else + return d + word_size; +} + +static inline bool duplicate_flag(const char * d) { + return get_flags(d) & DUPLICATE_FLAG; +} + +namespace { + + using namespace aspeller; + + ///////////////////////////////////////////////////////////////////// + // + // ReadOnlyDict + // + + struct Jump + { + char sl[4]; + u32int loc; + Jump() {memset(this, 0, sizeof(Jump));} + }; + + class ReadOnlyDict : public Dictionary + { + + public: //but don't use + + struct WordLookupParms { + const char * block_begin; + WordLookupParms() {} + typedef BlockVector<const u32int> Vector; + typedef u32int Value; + typedef const char * Key; + static const bool is_multi = false; + Key key(Value v) const {return block_begin + v;} + InsensitiveHash hash; + InsensitiveEqual equal; + bool is_nonexistent(Value v) const {return v == u32int_max;} + void make_nonexistent(const Value & v) const {abort();} + }; + typedef VectorHashTable<WordLookupParms> WordLookup; + + public: // but don't use + + char * block; + u32int block_size; + char * mmaped_block; + u32int mmaped_size; + const Jump * jump1; + const Jump * jump2; + WordLookup word_lookup; + const char * word_block; + const char * first_word; + + ReadOnlyDict(const ReadOnlyDict&); + ReadOnlyDict& operator= (const ReadOnlyDict&); + + struct Elements; + struct SoundslikeElements; + + public: + WordEntryEnumeration * detailed_elements() const; + Size size() const; + bool empty() const; + + ReadOnlyDict() + : Dictionary(basic_dict, "ReadOnlyDict") + { + block = 0; + } + + ~ReadOnlyDict() { + if (block != 0) { + if (mmaped_block) + mmap_free(mmaped_block, mmaped_size); + else + free(block); + } + } + + PosibErr<void> load(ParmString, Config &, DictList *, SpellerImpl *); + + bool lookup(ParmString word, const SensitiveCompare *, WordEntry &) const; + + bool clean_lookup(ParmString, WordEntry &) const; + + bool soundslike_lookup(const WordEntry &, WordEntry &) const; + bool soundslike_lookup(ParmString, WordEntry &) const; + + SoundslikeEnumeration * soundslike_elements() const; + }; + + static inline void convert(const char * w, WordEntry & o) { + o.what = WordEntry::Word; + o.word = w; + o.aff = get_affix(w); + o.word_size = get_word_size(w); + o.word_info = get_flags(w) & WORD_INFO_MASK; + } + + // + // + // + + struct ReadOnlyDict::Elements : public WordEntryEnumeration + { + const char * w; + WordEntry wi; + Elements(const char * w0) : w(w0) {wi.what = WordEntry::Word;} + WordEntry * next() { + if (get_offset(w) == 0) w += 2; // FIXME: This needs to be 3 + // when freq info is used + if (get_offset(w) == 0) return 0; + convert(w, wi); + w = get_next(w); + return &wi; + } + bool at_end() const {return get_offset(w) == 0;} + WordEntryEnumeration * clone() const {return new Elements(*this);} + void assign (const WordEntryEnumeration * other) { + *this = *static_cast<const Elements *>(other);} + }; + + WordEntryEnumeration * ReadOnlyDict::detailed_elements() const { + return new Elements(first_word); + } + + ReadOnlyDict::Size ReadOnlyDict::size() const { + return word_lookup.size(); + } + + bool ReadOnlyDict::empty() const { + return word_lookup.empty(); + } + + static const char * const cur_check_word = "aspell default speller rowl 1.10"; + + struct DataHead { + // all sizes except the last four must to divisible by: + static const unsigned int align = 16; + char check_word[64]; + u32int endian_check; // = 12345678 + char lang_hash[16]; + + u32int head_size; + u32int block_size; + u32int jump1_offset; + u32int jump2_offset; + u32int word_offset; + u32int hash_offset; + + u32int word_count; + u32int word_buckets; + u32int soundslike_count; + + u32int dict_name_size; + u32int lang_name_size; + u32int soundslike_name_size; + u32int soundslike_version_size; + + u32int first_word_offset; // from word block + + byte affix_info; // 0 = none, 1 = partially expanded, 2 = full + byte invisible_soundslike; + byte soundslike_root_only; + byte compound_info; // + byte freq_info; + }; + + PosibErr<void> ReadOnlyDict::load(ParmString f0, Config & config, + DictList *, SpellerImpl *) + { + set_file_name(f0); + const char * fn = file_name(); + + FStream f; + RET_ON_ERR(f.open(fn, "rb")); + + DataHead data_head; + + f.read(&data_head, sizeof(DataHead)); + +#if 0 + COUT << "Head Size: " << data_head.head_size << "\n"; + COUT << "Data Block Size: " << data_head.data_block_size << "\n"; + COUT << "Hash Block Size: " << data_head.hash_block_size << "\n"; + COUT << "Total Block Size: " << data_head.total_block_size << "\n"; +#endif + + if (strcmp(data_head.check_word, cur_check_word) != 0) + return make_err(bad_file_format, fn); + + if (data_head.endian_check != 12345678) + return make_err(bad_file_format, fn, _("Wrong endian order.")); + + CharVector word; + + word.resize(data_head.dict_name_size); + f.read(word.data(), data_head.dict_name_size); + + word.resize(data_head.lang_name_size); + f.read(word.data(), data_head.lang_name_size); + + PosibErr<void> pe = set_check_lang(word.data(),config); + if (pe.has_err()) { + if (pe.prvw_err()->is_a(language_related_error)) + return pe.with_file(fn); + else + return pe; + } + + if (data_head.soundslike_name_size != 0) { + word.resize(data_head.soundslike_name_size); + f.read(word.data(), data_head.soundslike_name_size); + + if (strcmp(word.data(), lang()->soundslike_name()) != 0) + return make_err(bad_file_format, fn, _("Wrong soundslike.")); + + word.resize(data_head.soundslike_version_size); + f.read(word.data(), data_head.soundslike_version_size); + + if (strcmp(word.data(), lang()->soundslike_version()) != 0) + return make_err(bad_file_format, fn, _("Wrong soundslike version.")); + } + + invisible_soundslike = data_head.invisible_soundslike; + soundslike_root_only = data_head.soundslike_root_only; + + affix_compressed = data_head.affix_info; + + block_size = data_head.block_size; + int offset = data_head.head_size; + mmaped_block = mmap_open(block_size + offset, f, 0); + if( mmaped_block != (char *)MAP_FAILED) { + block = mmaped_block + offset; + mmaped_size = block_size + offset; + } else { + mmaped_block = 0; + block = (char *)malloc(block_size); + f.seek(data_head.head_size); + f.read(block, block_size); + } + + if (data_head.jump2_offset) { + fast_scan = true; + jump1 = reinterpret_cast<const Jump *>(block + data_head.jump1_offset); + jump2 = reinterpret_cast<const Jump *>(block + data_head.jump2_offset); + } else { + jump1 = jump2 = 0; + } + + word_block = block + data_head.word_offset; + first_word = word_block + data_head.first_word_offset; + + word_lookup.parms().block_begin = word_block; + word_lookup.parms().hash .lang = lang(); + word_lookup.parms().equal.cmp.lang = lang(); + const u32int * begin = reinterpret_cast<const u32int *> + (block + data_head.hash_offset); + word_lookup.vector().set(begin, begin + data_head.word_buckets); + word_lookup.set_size(data_head.word_count); + + return no_err; + } + + void lookup_adv(WordEntry * wi); + + static inline void prep_next(WordEntry * wi, + const char * w, + const SensitiveCompare * c, + const char * orig) + { + loop: + if (!duplicate_flag(w)) return; + w = get_next(w); + if (!(*c)(orig, w)) goto loop; + wi->intr[0] = (void *)w; + wi->intr[1] = (void *)c; + wi->intr[2] = (void *)orig; + wi->adv_ = lookup_adv; + } + + void lookup_adv(WordEntry * wi) + { + const char * w = (const char *)wi->intr[0]; + const SensitiveCompare * c = (const SensitiveCompare *)wi->intr[1]; + const char * orig = (const char *)wi->intr[2]; + convert(w,*wi); + wi->adv_ = 0; + prep_next(wi, w, c, orig); + } + + bool ReadOnlyDict::lookup(ParmString word, const SensitiveCompare * c, + WordEntry & o) const + { + o.clear(); + WordLookup::const_iterator i = word_lookup.find(word); + if (i == word_lookup.end()) return false; + const char * w = word_block + *i; + for (;;) { + if ((*c)(word, w)) { + convert(w,o); + prep_next(&o, w, c, word); + return true; + } + if (!duplicate_flag(w)) break; + w = get_next(w); + } + return false; + } + + struct ReadOnlyDict::SoundslikeElements : public SoundslikeEnumeration + { + WordEntry data; + const ReadOnlyDict * obj; + const Jump * jump1; + const Jump * jump2; + const char * cur; + const char * prev; + int level; + bool invisible_soundslike; + + WordEntry * next(int stopped_at); + + SoundslikeElements(const ReadOnlyDict * o) + : obj(o), jump1(obj->jump1), jump2(obj->jump2), cur(0), + level(1), invisible_soundslike(o->invisible_soundslike) { + data.what = o->invisible_soundslike ? WordEntry::Word : WordEntry::Soundslike;} + }; + + WordEntry * ReadOnlyDict::SoundslikeElements::next(int stopped_at) { + + //CERR << level << ":" << stopped_at << " :"; + //CERR << jump1->sl << ":" << jump2->sl << "\n"; + + loop: + + const char * tmp = cur; + const char * p; + + if (level == 1 && stopped_at < 2) { + + ++jump1; + tmp = jump1->sl; + goto jquit; + + } else if (level == 2 && stopped_at < 3) { + + ++jump2; + if (jump2[-1].sl[1] != jump2[0].sl[1]) { + ++jump1; + level = 1; + tmp = jump1->sl; + } else { + tmp = jump2->sl; + } + goto jquit; + + } else if (level == 1) { + + level = 2; + jump2 = obj->jump2 + jump1->loc; + tmp = jump2->sl; + goto jquit; + + } else if (level == 2) { + + tmp = cur = obj->word_block + jump2->loc; + level = 3; + + } else if (get_offset(cur) == 0) { + + level = 2; + ++jump2; + if (jump2[-1].sl[1] != jump2[0].sl[1]) { + level = 1; + ++jump1; + tmp = jump1->sl; + } else { + tmp = jump2->sl; + } + goto jquit; + + } + + cur = get_next(cur); // this will be the NEXT item looked at + + p = prev; + prev = tmp; + if (p) { + // PRECOND: + // unless stopped_at >= LARGE_NUM + // strlen(p) >= stopped_at + // (stopped_at >= 3) implies + // strncmp(p, tmp, 3) == 0 if !invisible_soundslike + // strncmp(to_sl(p), to_sl(tmp), 3) == 0 if invisible_soundslike + if (stopped_at == 3) { + if (p[3] == tmp[3]) goto loop; + } else if (stopped_at == 4) { + if (p[3] == tmp[3] && tmp[3] && + p[4] == tmp[4]) goto loop; + } else if (stopped_at == 5) { + if (p[3] == tmp[3] && tmp[3] && + p[4] == tmp[4] && tmp[4] && + p[5] == tmp[5]) goto loop; + } + } + + data.word = tmp; + data.word_size = get_word_size(tmp); + if (invisible_soundslike) { + convert(tmp, data); + } + data.intr[0] = (void *)tmp; + + return &data; + + jquit: + prev = 0; + if (!*tmp) return 0; + data.word = tmp; + data.word_size = !tmp[1] ? 1 : !tmp[2] ? 2 : 3; + data.intr[0] = 0; + if (invisible_soundslike) { + data.what = WordEntry::Clean; + data.aff = 0; + } + return &data; + } + + SoundslikeEnumeration * ReadOnlyDict::soundslike_elements() const { + + return new SoundslikeElements(this); + + } + + static void soundslike_next(WordEntry * w) + { + const char * cur = (const char *)(w->intr[0]); + const char * end = (const char *)(w->intr[1]); + convert(cur, *w); + cur = get_next(cur); + w->intr[0] = (void *)cur; + if (cur >= end) w->adv_ = 0; + } + + static void clean_lookup_adv(WordEntry * wi) + { + const char * w = wi->word; + w = get_next(w); + convert(w,*wi); + if (!duplicate_flag(w)) wi->adv_ = 0; + } + + bool ReadOnlyDict::clean_lookup(ParmString sl, WordEntry & o) const + { + o.clear(); + WordLookup::const_iterator i = word_lookup.find(sl); + if (i == word_lookup.end()) return false; + const char * w = word_block + *i; + convert(w, o); + if (duplicate_flag(w)) o.adv_ = clean_lookup_adv; + return true; + } + + bool ReadOnlyDict::soundslike_lookup(const WordEntry & s, WordEntry & w) const + { + if (s.intr[0] == 0) { + + return false; + + } else if (!invisible_soundslike) { + + w.clear(); + w.what = WordEntry::Word; + w.intr[0] = (void *)get_sl_words_begin(s.word); + w.intr[1] = (void *)get_sl_words_end(s.word); + w.adv_ = soundslike_next; + soundslike_next(&w); + return true; + + } else { + + w.clear(); + w.what = WordEntry::Word; + convert(s.word, w); + return true; + + } + } + + bool ReadOnlyDict::soundslike_lookup(ParmString s, WordEntry & w) const + { + if (invisible_soundslike) { + return ReadOnlyDict::clean_lookup(s,w); + } else { + return false; + } + } + +} + +namespace aspeller { + + Dictionary * new_default_readonly_dict() { + return new ReadOnlyDict(); + } + +} + +namespace { + + // Possible: + // No Affix Compression: + // no soundslike + // invisible soundslike + // with soundslike + // Affix Compression: + // group by root: + // no soundslike + // invisible soundslike + // with soundslike + // expand prefix: + // no soundslike + // invisible soundslike + + using namespace aspeller; + + struct WordData { + static const unsigned struct_size; + WordData * next; + char * sl; + char * aff; + byte word_size; + byte sl_size; + byte data_size; + byte flags; + char word[1]; + }; + + const unsigned WordData::struct_size = sizeof(WordData) - 1; + + + struct SoundslikeLess { + InsensitiveCompare icomp; + SoundslikeLess(const Language * l) : icomp(l) {} + bool operator() (WordData * x, WordData * y) const { + int res = strcmp(x->sl, y->sl); + if (res != 0) return res < 0; + res = icomp(x->word, y->word); + if (res != 0) return res < 0; + return strcmp(x->word, y->word) < 0; + } + }; + + struct WordLookupParms { + const char * block_begin; + WordLookupParms() {} + typedef acommon::Vector<u32int> Vector; + typedef u32int Value; + typedef const char * Key; + static const bool is_multi = false; + Key key(Value v) const {return block_begin + v;} + InsensitiveHash hash; + InsensitiveEqual equal; + bool is_nonexistent(Value v) const {return v == u32int_max;} + void make_nonexistent(Value & v) const {v = u32int_max;} + }; + typedef VectorHashTable<WordLookupParms> WordLookup; + + static inline unsigned int round_up(unsigned int i, unsigned int size) { + return ((i + size - 1)/size)*size; + } + + static void advance_file(FStream & out, int pos) { + int diff = pos - out.tell(); + assert(diff >= 0); + for(; diff != 0; --diff) + out << '\0'; + } + + PosibErr<void> create (StringEnumeration * els, + const Language & lang, + Config & config) + { + assert(sizeof(u16int) == 2); + assert(sizeof(u32int) == 4); + + bool full_soundslike = !(strcmp(lang.soundslike_name(), "none") == 0 || + strcmp(lang.soundslike_name(), "stripped") == 0 || + strcmp(lang.soundslike_name(), "simple") == 0); + + bool affix_compress = (lang.affix() && + config.retrieve_bool("affix-compress")); + + bool partially_expand = (affix_compress && + !full_soundslike && + config.retrieve_bool("partially-expand")); + + bool invisible_soundslike = false; + if (partially_expand) + invisible_soundslike = true; + else if (config.have("invisible-soundslike")) + invisible_soundslike = config.retrieve_bool("invisible-soundslike"); + else if (!full_soundslike) + invisible_soundslike = true; + + ConvEC iconv; + if (!config.have("norm-strict")) + config.replace("norm-strict", "true"); + if (config.have("encoding")) + RET_ON_ERR(iconv.setup(config, config.retrieve("encoding"), lang.charmap(),NormFrom)); + else + RET_ON_ERR(iconv.setup(config, lang.data_encoding(), lang.charmap(), NormFrom)); + + String base = config.retrieve("master-path"); + + DataHead data_head; + memset(&data_head, 0, sizeof(data_head)); + strcpy(data_head.check_word, cur_check_word); + + data_head.endian_check = 12345678; + + data_head.dict_name_size = 1; + data_head.lang_name_size = strlen(lang.name()) + 1; + data_head.soundslike_name_size = strlen(lang.soundslike_name()) + 1; + data_head.soundslike_version_size = strlen(lang.soundslike_version()) + 1; + data_head.head_size = sizeof(DataHead); + data_head.head_size += data_head.dict_name_size; + data_head.head_size += data_head.lang_name_size; + data_head.head_size += data_head.soundslike_name_size; + data_head.head_size += data_head.soundslike_version_size; + data_head.head_size = round_up(data_head.head_size, DataHead::align); + + data_head.affix_info = affix_compress ? partially_expand ? 1 : 2 : 0; + data_head.invisible_soundslike = invisible_soundslike; + data_head.soundslike_root_only = affix_compress && !partially_expand ? 1 : 0; + +#if 0 + CERR.printl("FLAGS: "); + if (full_soundslike) CERR.printl(" full soundslike"); + if (invisible_soundslike) CERR.printl(" invisible soundslike"); + if (data_head.soundslike_root_only) CERR.printl(" soundslike root only"); + if (affix_compress) CERR.printl(" affix compress"); + if (partially_expand) CERR.printl(" partially expand"); + CERR.printl("---"); +#endif + + String temp; + + int num_entries = 0; + int uniq_entries = 0; + + ObjStack buf(16*1024); + String sl_buf; + + WordData * first = 0; + + // + // Read in Wordlist + // + { + WordListIterator wl_itr(els, &lang, config.retrieve_bool("warn") ? &CERR : 0); + wl_itr.init(config); + ObjStack exp_buf; + WordAff * exp_list; + WordAff single; + single.next = 0; + Vector<WordAff> af_list; + WordData * * prev = &first; + + for (;;) { + + PosibErr<bool> pe = wl_itr.adv(); + if (pe.has_err()) return pe; + if (!pe.data) break; + + const char * w = wl_itr->word.str; + unsigned int s = wl_itr->word.size; + + const char * affixes = wl_itr->aff.str; + + if (*affixes && !lang.affix()) + return make_err(other_error, + _("Affix flags found in word but no affix file given.")); + + if (*affixes && !affix_compress) { + exp_buf.reset(); + exp_list = lang.affix()->expand(w, affixes, exp_buf); + } else if (*affixes && partially_expand) { + // expand any affixes which will effect the first + // 3 letters of a word. This is needed so that the + // jump tables will function correctly + exp_buf.reset(); + exp_list = lang.affix()->expand(w, affixes, exp_buf, 3); + } else { + single.word.str = w; + single.word.size = strlen(w); + single.aff = (const byte *)affixes; + exp_list = &single; + } + + // iterate through each expanded word + + for (WordAff * p = exp_list; p; p = p->next) + { + const char * w = p->word.str; + s = p->word.size; + + unsigned total_size = WordData::struct_size; + unsigned data_size = s + 1; + unsigned aff_size = strlen((const char *)p->aff); + if (aff_size > 0) data_size += aff_size + 1; + total_size += data_size; + lang.to_soundslike(sl_buf, w); + const char * sl = sl_buf.str(); + unsigned sl_size = sl_buf.size(); + if (strcmp(sl,w) == 0) sl = w; + if (sl != w) total_size += sl_size + 1; + + if (total_size - WordData::struct_size > 240) + return make_err(invalid_word, MsgConv(lang)(w), + _("The total word length, with soundslike data, is larger than 240 characters.")); + + WordData * b = (WordData *)buf.alloc(total_size, sizeof(void *)); + *prev = b; + b->next = 0; + prev = &b->next; + + b->word_size = s; + b->sl_size = strlen(sl); + b->data_size = data_size; + b->flags = lang.get_word_info(w); + + char * z = b->word; + + memcpy(z, w, s + 1); + z += s + 1; + + if (aff_size > 0) { + b->flags |= HAVE_AFFIX_FLAG; + b->aff = z; + memcpy(z, p->aff, aff_size + 1); + z += aff_size + 1; + } else { + b->aff = 0; + } + + if (sl != w) { + memcpy(z, sl, sl_size + 1); + b->sl = z; + } else { + b->sl = b->word; + } + + } + } + delete els; + } + + // + // sort WordData linked list based on (sl, word) + // + + first = sort(first, SoundslikeLess(&lang)); + + // + // duplicate check + // + WordData * prev = first; + WordData * cur = first ? first->next : 0; + InsensitiveEqual ieq(&lang); + while (cur) { + if (strcmp(prev->word, cur->word) == 0) { + // merge affix info if necessary + if (!prev->aff && cur->aff) { + prev->flags |= HAVE_AFFIX_FLAG; + prev->aff = cur->aff; + prev->data_size += strlen(prev->aff) + 1; + } else if (prev->aff && cur->aff) { + unsigned l1 = strlen(prev->aff); + unsigned l2 = strlen(cur->aff); + char * aff = (char *)buf.alloc(l1 + l2 + 1); + memcpy(aff, prev->aff, l1); + prev->aff = aff; + aff += l1; + for (const char * p = cur->aff; *p; ++p) { + if (memchr(prev->aff, *p, l1)) continue; + *aff = *p; + ++aff; + } + *aff = '\0'; + prev->data_size = prev->word_size + (aff - prev->aff) + 2; + } + prev->next = cur->next; + } else { + if (ieq(prev->word, cur->word)) prev->flags |= DUPLICATE_FLAG; + else ++uniq_entries; + ++num_entries; + prev = cur; + } + cur = cur->next; + } + + // + // + // + + unsigned data_size = 16; + WordData * p = first; + if (invisible_soundslike) { + + for (; p; p = p->next) + data_size += 3 + p->data_size; + + } else { + + while (p) + { + unsigned ds = 2 + p->sl_size + 1; + + char * prev = p->sl; + + do { + + ds += 3 + p->data_size; + p->sl = prev; + p = p->next; + + } while (p && strcmp(prev, p->sl) == 0 && ds + 3 + p->data_size < 255); + + data_size += ds; + + } + + } + + // + // Create the final data structures + // + + CharVector data; + data.reserve(data_size); + data.write32(0); // to avoid nasty special cases + unsigned int prev_pos = data.size(); + data.write32(0); + unsigned prev_w_pos = data.size(); + + WordLookup lookup(affix_compress + ? uniq_entries * 3 / 2 + : uniq_entries * 5 / 4); + lookup.parms().block_begin = data.begin(); + lookup.parms().hash .lang = ⟨ + lookup.parms().equal.cmp.lang = ⟨ + + Vector<Jump> jump1; + Vector<Jump> jump2; + + const int head_size = invisible_soundslike ? 3 : 2; + + const char * prev_sl = ""; + p = first; + while (p) + { + if (invisible_soundslike) { + + data.write(p->flags); // flags + data.write('\0'); // place holder for offset to next item + data.write(p->word_size); + + } else { + + data.write('\0'); // place holder for offset to next item + data.write(p->sl_size); + + } + + if (strncmp(prev_sl, p->sl, 3) != 0) { + + Jump jump; + strncpy(jump.sl, p->sl, 3); + jump.loc = data.size(); + jump2.push_back(jump); + + if (strncmp(prev_sl, p->sl, 2) != 0) { + Jump jump; + strncpy(jump.sl, p->sl, 2); + jump.loc = jump2.size() - 1; + jump1.push_back(jump); + } + + data[prev_pos - NEXT_O] = (byte)(data.size() - prev_pos - head_size + 1); + // when advanced to this position the offset byte will + // be null (since it will point to the null terminator + // of the last word) and will thus signal the end of the + // group + + } else { + + data[prev_pos - NEXT_O] = (byte)(data.size() - prev_pos); + + } + + prev_pos = data.size(); + prev_sl = p->sl; + + if (invisible_soundslike) { + + unsigned pos = data.size(); + prev_w_pos = data.size(); + data.write(p->word, p->word_size + 1); + if (p->aff) data.write(p->aff, p->data_size - p->word_size - 1); + lookup.insert(pos); + + p = p->next; + + } else { + + data.write(p->sl, p->sl_size + 1); + + // write all word entries with the same soundslike + + do { + data.write(p->flags); + data.write(p->data_size + 3); + data.write(p->word_size); + + unsigned pos = data.size(); + data[prev_w_pos - NEXT_O] = (byte)(pos - prev_w_pos); + data.write(p->word, p->word_size + 1); + if (p->aff) data.write(p->aff, p->data_size - p->word_size - 1); + lookup.insert(pos); + + prev_w_pos = pos; + prev_sl = p->sl; + + p = p->next; + + } while (p && prev_sl == p->sl); // yes I really mean to use pointer compare here + } + } + + // add special end case + if (data.size() % 2 != 0) data.write('\0'); + data.write16(0); + data.write16(0); + data[prev_pos - NEXT_O] |= (byte)(data.size() - prev_pos); + + jump2.push_back(Jump()); + jump1.push_back(Jump()); + + data.write(0); + data.write(0); + data.write(0); + + if (invisible_soundslike) + data_head.first_word_offset = data[4 - NEXT_O] + 4; + else + data_head.first_word_offset = data[8 - NEXT_O] + 8; + + memset(data.data(), 0, 8); + + //CERR.printf("%d == %d\n", lookup.size(), uniq_entries); + //assert(lookup.size() == uniq_entries); + + data_head.word_count = num_entries; + data_head.word_buckets = lookup.bucket_count(); + + FStream out; + out.open(base, "wb"); + + advance_file(out, data_head.head_size); + + // Write jump1 table + data_head.jump1_offset = out.tell() - data_head.head_size; + out.write(jump1.data(), jump1.size() * sizeof(Jump)); + + // Write jump2 table + advance_file(out, round_up(out.tell(), DataHead::align)); + data_head.jump2_offset = out.tell() - data_head.head_size; + out.write(jump2.data(), jump2.size() * sizeof(Jump)); + + // Write data block + advance_file(out, round_up(out.tell(), DataHead::align)); + data_head.word_offset = out.tell() - data_head.head_size; + out.write(data.data(), data.size()); + + // Write hash + advance_file(out, round_up(out.tell(), DataHead::align)); + data_head.hash_offset = out.tell() - data_head.head_size; + out.write(&lookup.vector().front(), lookup.vector().size() * 4); + + // calculate block size + advance_file(out, round_up(out.tell(), DataHead::align)); + data_head.block_size = out.tell() - data_head.head_size; + + // write data head to file + out.seek(0); + out.write(&data_head, sizeof(DataHead)); + out.write(" ", 1); + out.write(lang.name(), data_head.lang_name_size); + out.write(lang.soundslike_name(), data_head.soundslike_name_size); + out.write(lang.soundslike_version(), data_head.soundslike_version_size); + + return no_err; + } + +} + +namespace aspeller { + PosibErr<void> create_default_readonly_dict(StringEnumeration * els, + Config & config) + { + CachePtr<Language> lang; + PosibErr<Language *> res = new_language(config); + if (res.has_err()) return res; + lang.reset(res.data); + lang->set_lang_defaults(config); + RET_ON_ERR(create(els,*lang,config)); + return no_err; + } +} + diff --git a/jni/modules/speller/default/readonly_ws.lo b/jni/modules/speller/default/readonly_ws.lo new file mode 100644 index 0000000..41c523c --- /dev/null +++ b/jni/modules/speller/default/readonly_ws.lo @@ -0,0 +1,12 @@ +# modules/speller/default/readonly_ws.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/readonly_ws.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/speller_impl.cpp b/jni/modules/speller/default/speller_impl.cpp new file mode 100644 index 0000000..f0704e8 --- /dev/null +++ b/jni/modules/speller/default/speller_impl.cpp @@ -0,0 +1,742 @@ +// This file is part of The New Aspell +// Copyright (C) 2000-2001,2011 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +#include <stdlib.h> +#include <typeinfo> + +#include "clone_ptr-t.hpp" +#include "config.hpp" +#include "data.hpp" +#include "data_id.hpp" +#include "errors.hpp" +#include "language.hpp" +#include "speller_impl.hpp" +#include "string_list.hpp" +#include "suggest.hpp" +#include "tokenizer.hpp" +#include "convert.hpp" +#include "stack_ptr.hpp" + +//#include "iostream.hpp" + +#include "gettext.h" + +namespace aspeller { + // + // data_access functions + // + + const char * SpellerImpl::lang_name() const { + return lang_->name(); + } + + // + // to lower + // + + char * SpellerImpl::to_lower(char * str) + { + for (char * i = str; *i; ++i) + *i = lang_->to_lower(*i); + return str; + } + + ////////////////////////////////////////////////////////////////////// + // + // Spell check methods + // + + PosibErr<void> SpellerImpl::add_to_personal(MutableString word) { + if (!personal_) return no_err; + return personal_->add(word); + } + + PosibErr<void> SpellerImpl::add_to_session(MutableString word) { + if (!session_) return no_err; + return session_->add(word); + } + + PosibErr<void> SpellerImpl::clear_session() { + if (!session_) return no_err; + return session_->clear(); + } + + PosibErr<void> SpellerImpl::store_replacement(MutableString mis, + MutableString cor) + { + return SpellerImpl::store_replacement(mis,cor,true); + } + + PosibErr<void> SpellerImpl::store_replacement(const String & mis, + const String & cor, + bool memory) + { + if (ignore_repl) return no_err; + if (!repl_) return no_err; + String::size_type pos; + StackPtr<StringEnumeration> sugels(intr_suggest_->suggest(mis.c_str()).elements()); + const char * first_word = sugels->next(); + CheckInfo w1, w2; + String cor1, cor2; + String buf; + bool correct = false; + pos = cor.find(' '); + if (pos == String::npos) { + cor1 = cor; + correct = check_affix(cor, w1, 0); + } else { + cor1 = (String)cor.substr(0,pos); + ++pos; + while (pos < cor.size() && cor[pos] == ' ') ++pos; + cor2 = (String)cor.substr(pos); + correct = check_affix(cor1, w1, 0) && check_affix(cor2, w2, 0); + } + if (correct) { + String cor_orignal_casing(cor1); + if (!cor2.empty()) { + cor_orignal_casing += cor[pos-1]; + cor_orignal_casing += cor2; + } + // Don't try to add the empty string, causes all kinds of + // problems. Can happen if the original replacement nothing but + // whitespace. + if (cor_orignal_casing.empty()) + return no_err; + if (first_word == 0 || cor != first_word) { + lang().to_lower(buf, mis.str()); + repl_->add_repl(buf, cor_orignal_casing); + } + + if (memory && prev_cor_repl_ == mis) + store_replacement(prev_mis_repl_, cor, false); + + } else { //!correct + + if (memory) { + if (prev_cor_repl_ != mis) + prev_mis_repl_ = mis; + prev_cor_repl_ = cor; + } + } + return no_err; + } + + // + // simple functions + // + + PosibErr<const WordList *> SpellerImpl::suggest(MutableString word) + { + return &suggest_->suggest(word); + } + + bool SpellerImpl::check_simple (ParmString w, WordEntry & w0) + { + w0.clear(); // FIXME: is this necessary? + const char * x = w; + while (*x != '\0' && (x-w) < static_cast<int>(ignore_count)) ++x; + if (*x == '\0') {w0.word = w; return true;} + WS::const_iterator i = check_ws.begin(); + WS::const_iterator end = check_ws.end(); + do { + if ((*i)->lookup(w, &s_cmp, w0)) return true; + ++i; + } while (i != end); + return false; + }; + + bool SpellerImpl::check_affix(ParmString word, CheckInfo & ci, GuessInfo * gi) + { + WordEntry w; + bool res = check_simple(word, w); + if (res) {ci.word = w.word; return true;} + if (affix_compress) { + res = lang_->affix()->affix_check(LookupInfo(this, LookupInfo::Word), word, ci, 0); + if (res) return true; + } + if (affix_info && gi) { + lang_->affix()->affix_check(LookupInfo(this, LookupInfo::Guess), word, ci, gi); + } + return false; + } + + inline bool SpellerImpl::check2(char * word, /* it WILL modify word */ + bool try_uppercase, + CheckInfo & ci, GuessInfo * gi) + { + bool res = check_affix(word, ci, gi); + if (res) return true; + if (!try_uppercase) return false; + char t = *word; + *word = lang_->to_title(t); + res = check_affix(word, ci, gi); + *word = t; + if (res) return true; + return false; + } + + PosibErr<bool> SpellerImpl::check(char * word, char * word_end, + /* it WILL modify word */ + bool try_uppercase, + unsigned run_together_limit, + CheckInfo * ci, GuessInfo * gi) + { + assert(run_together_limit <= 8); // otherwise it will go above the + // bounds of the word array + clear_check_info(*ci); + bool res = check2(word, try_uppercase, *ci, gi); + if (res) return true; + if (run_together_limit <= 1) return false; + enum {Yes, No, Unknown} is_title = try_uppercase ? Yes : Unknown; + for (char * i = word + run_together_min_; + i <= word_end - run_together_min_; + ++i) + { + char t = *i; + *i = '\0'; + //FIXME: clear ci, gi? + res = check2(word, try_uppercase, *ci, gi); + if (!res) {*i = t; continue;} + if (is_title == Unknown) + is_title = lang_->case_pattern(word) == FirstUpper ? Yes : No; + *i = t; + if (check(i, word_end, is_title == Yes, run_together_limit - 1, ci + 1, 0)) { + ci->compound = true; + ci->next = ci + 1; + return true; + } + } + return false; + } + + ////////////////////////////////////////////////////////////////////// + // + // Word list managment methods + // + + PosibErr<void> SpellerImpl::save_all_word_lists() { + SpellerDict * i = dicts_; + for (; i; i = i->next) { + if (i->save_on_saveall) + RET_ON_ERR(i->dict->synchronize()); + } + return no_err; + } + + int SpellerImpl::num_wordlists() const { + return 0; //FIXME + } + + SpellerImpl::WordLists SpellerImpl::wordlists() const { + return 0; //FIXME + //return MakeEnumeration<DataSetCollection::Parms>(wls_->begin(), DataSetCollection::Parms(wls_->end())); + } + + PosibErr<const WordList *> SpellerImpl::personal_word_list() const { + const WordList * wl = static_cast<const WordList *>(personal_); + if (!wl) return make_err(operation_not_supported_error, + _("The personal word list is unavailable.")); + return wl; + } + + PosibErr<const WordList *> SpellerImpl::session_word_list() const { + const WordList * wl = static_cast<const WordList *>(session_); + if (!wl) return make_err(operation_not_supported_error, + _("The session word list is unavailable.")); + return wl; + } + + PosibErr<const WordList *> SpellerImpl::main_word_list() const { + const WordList * wl = dynamic_cast<const WordList *>(main_); + if (!wl) return make_err(operation_not_supported_error, + _("The main word list is unavailable.")); + return wl; + } + + const SpellerDict * SpellerImpl::locate (const Dict::Id & id) const + { + for (const SpellerDict * i = dicts_; i; i = i->next) + if (i->dict->id() == id) return i; + return 0; + } + + PosibErr<void> SpellerImpl::add_dict(SpellerDict * wc) + { + Dict * w = wc->dict; + assert(locate(w->id()) == 0); + + if (!lang_) { + lang_.copy(w->lang()); + config_->replace("lang", lang_name()); + config_->replace("language-tag", lang_name()); + } else { + if (strcmp(lang_->name(), w->lang()->name()) != 0) + return make_err(mismatched_language, lang_->name(), w->lang()->name()); + } + + // add to master list + wc->next = dicts_; + dicts_ = wc; + + // check if it has a special_id and act accordingly + switch (wc->special_id) { + case main_id: + assert(main_ == 0); + main_ = w; + break; + case personal_id: + assert(personal_ == 0); + personal_ = w; + break; + case session_id: + assert(session_ == 0); + session_ = w; + break; + case personal_repl_id: + assert(repl_ == 0); + repl_ = w; + break; + case none_id: + break; + } + + return no_err; + } + + ////////////////////////////////////////////////////////////////////// + // + // Config Notifier + // + + struct UpdateMember { + const char * name; + enum Type {String, Int, Bool, Add, Rem, RemAll}; + Type type; + union Fun { + typedef PosibErr<void> (*WithStr )(SpellerImpl *, const char *); + typedef PosibErr<void> (*WithInt )(SpellerImpl *, int); + typedef PosibErr<void> (*WithBool)(SpellerImpl *, bool); + WithStr with_str; + WithInt with_int; + WithBool with_bool; + Fun() {} + Fun(WithStr m) : with_str (m) {} + Fun(WithInt m) : with_int (m) {} + Fun(WithBool m) : with_bool(m) {} + PosibErr<void> call(SpellerImpl * m, const char * val) const + {return (*with_str) (m,val);} + PosibErr<void> call(SpellerImpl * m, int val) const + {return (*with_int) (m,val);} + PosibErr<void> call(SpellerImpl * m, bool val) const + {return (*with_bool)(m,val);} + } fun; + typedef SpellerImpl::ConfigNotifier CN; + }; + + template <typename T> + PosibErr<void> callback(SpellerImpl * m, const KeyInfo * ki, T value, + UpdateMember::Type t); + + class SpellerImpl::ConfigNotifier : public Notifier { + private: + SpellerImpl * speller_; + public: + ConfigNotifier(SpellerImpl * m) + : speller_(m) + {} + + PosibErr<void> item_updated(const KeyInfo * ki, int value) { + return callback(speller_, ki, value, UpdateMember::Int); + } + PosibErr<void> item_updated(const KeyInfo * ki, bool value) { + return callback(speller_, ki, value, UpdateMember::Bool); + } + PosibErr<void> item_updated(const KeyInfo * ki, ParmStr value) { + return callback(speller_, ki, value, UpdateMember::String); + } + + static PosibErr<void> ignore(SpellerImpl * m, int value) { + m->ignore_count = value; + return no_err; + } + static PosibErr<void> ignore_accents(SpellerImpl * m, bool value) { + return no_err; + } + static PosibErr<void> ignore_case(SpellerImpl * m, bool value) { + m->s_cmp.case_insensitive = value; + m->s_cmp_begin.case_insensitive = value; + m->s_cmp_middle.case_insensitive = value; + m->s_cmp_end.case_insensitive = value; + return no_err; + } + static PosibErr<void> ignore_repl(SpellerImpl * m, bool value) { + + m->ignore_repl = value; + return no_err; + } + static PosibErr<void> save_repl(SpellerImpl * m, bool value) { + // FIXME + // m->save_on_saveall(DataSet::Id(&m->personal_repl()), value); + abort(); return no_err; + } + static PosibErr<void> sug_mode(SpellerImpl * m, const char * mode) { + RET_ON_ERR(m->suggest_->set_mode(mode)); + RET_ON_ERR(m->intr_suggest_->set_mode(mode)); + return no_err; + } + static PosibErr<void> run_together(SpellerImpl * m, bool value) { + m->unconditional_run_together_ = value; + m->run_together = m->unconditional_run_together_; + return no_err; + } + static PosibErr<void> run_together_limit(SpellerImpl * m, int value) { + if (value > 8) { + m->config()->replace("run-together-limit", "8"); + // will loop back + } else { + m->run_together_limit_ = value; + } + return no_err; + } + static PosibErr<void> run_together_min(SpellerImpl * m, int value) { + m->run_together_min_ = value; + return no_err; + } + + }; + + static UpdateMember update_members[] = + { + {"ignore", UpdateMember::Int, UpdateMember::CN::ignore} + ,{"ignore-accents",UpdateMember::Bool, UpdateMember::CN::ignore_accents} + ,{"ignore-case", UpdateMember::Bool, UpdateMember::CN::ignore_case} + ,{"ignore-repl", UpdateMember::Bool, UpdateMember::CN::ignore_repl} + //,{"save-repl", UpdateMember::Bool, UpdateMember::CN::save_repl} + ,{"sug-mode", UpdateMember::String, UpdateMember::CN::sug_mode} + ,{"run-together", + UpdateMember::Bool, + UpdateMember::CN::run_together} + ,{"run-together-limit", + UpdateMember::Int, + UpdateMember::CN::run_together_limit} + ,{"run-together-min", + UpdateMember::Int, + UpdateMember::CN::run_together_min} + }; + + template <typename T> + PosibErr<void> callback(SpellerImpl * m, const KeyInfo * ki, T value, + UpdateMember::Type t) + { + const UpdateMember * i + = update_members; + const UpdateMember * end + = i + sizeof(update_members)/sizeof(UpdateMember); + while (i != end) { + if (strcmp(ki->name, i->name) == 0) { + if (i->type == t) { + RET_ON_ERR(i->fun.call(m, value)); + break; + } + } + ++i; + } + return no_err; + } + + ////////////////////////////////////////////////////////////////////// + // + // SpellerImpl inititization members + // + + SpellerImpl::SpellerImpl() + : Speller(0) /* FIXME */, ignore_repl(true), + dicts_(0), personal_(0), session_(0), repl_(0), main_(0) + {} + + inline PosibErr<void> add_dicts(SpellerImpl * sp, DictList & d) + { + for (;!d.empty(); d.pop()) + { + if (!sp->locate(d.last()->id())) { + RET_ON_ERR(sp->add_dict(new SpellerDict(d.last()))); + } + } + return no_err; + } + + PosibErr<void> SpellerImpl::setup(Config * c) { + assert (config_ == 0); + config_.reset(c); + + ignore_repl = config_->retrieve_bool("ignore-repl"); + ignore_count = config_->retrieve_int("ignore"); + + DictList to_add; + RET_ON_ERR(add_data_set(config_->retrieve("master-path"), *config_, &to_add, this)); + RET_ON_ERR(add_dicts(this, to_add)); + + s_cmp.lang = lang_; + s_cmp.case_insensitive = config_->retrieve_bool("ignore-case"); + + s_cmp_begin.lang = lang_; + s_cmp_begin.case_insensitive = s_cmp.case_insensitive; + s_cmp_begin.end = false; + + s_cmp_middle.lang = lang_; + s_cmp_middle.case_insensitive = s_cmp.case_insensitive; + s_cmp_middle.begin = false; + s_cmp_middle.end = false; + + s_cmp_end.lang = lang_; + s_cmp_end.case_insensitive = s_cmp.case_insensitive; + s_cmp_end.begin = false; + + StringList extra_dicts; + config_->retrieve_list("extra-dicts", &extra_dicts); + StringListEnumeration els = extra_dicts.elements_obj(); + const char * dict_name; + while ( (dict_name = els.next()) != 0) { + RET_ON_ERR(add_data_set(dict_name,*config_, &to_add, this)); + RET_ON_ERR(add_dicts(this, to_add)); + } + + bool use_other_dicts = config_->retrieve_bool("use-other-dicts"); + + if (use_other_dicts && !personal_) + { + Dictionary * temp; + temp = new_default_writable_dict(); + PosibErrBase pe = temp->load(config_->retrieve("personal-path"),*config_); + if (pe.has_err(cant_read_file)) + temp->set_check_lang(lang_name(), *config_); + else if (pe.has_err()) + return pe; + RET_ON_ERR(add_dict(new SpellerDict(temp, *config_, personal_id))); + } + + if (use_other_dicts && !session_) + { + Dictionary * temp; + temp = new_default_writable_dict(); + temp->set_check_lang(lang_name(), *config_); + RET_ON_ERR(add_dict(new SpellerDict(temp, *config_, session_id))); + } + + if (use_other_dicts && !repl_) + { + ReplacementDict * temp = new_default_replacement_dict(); + PosibErrBase pe = temp->load(config_->retrieve("repl-path"),*config_); + if (pe.has_err(cant_read_file)) + temp->set_check_lang(lang_name(), *config_); + else if (pe.has_err()) + return pe; + RET_ON_ERR(add_dict(new SpellerDict(temp, *config_, personal_repl_id))); + } + + const char * sys_enc = lang_->charmap(); + String user_enc = config_->retrieve("encoding"); + if (user_enc == "none") { + config_->replace("encoding", sys_enc); + user_enc = sys_enc; + } + + PosibErr<Convert *> conv; + conv = new_convert(*c, user_enc, sys_enc, NormFrom); + if (conv.has_err()) return conv; + to_internal_.reset(conv); + conv = new_convert(*c, sys_enc, user_enc, NormTo); + if (conv.has_err()) return conv; + from_internal_.reset(conv); + + unconditional_run_together_ = config_->retrieve_bool("run-together"); + run_together = unconditional_run_together_; + + run_together_limit_ = config_->retrieve_int("run-together-limit"); + if (run_together_limit_ > 8) { + config_->replace("run-together-limit", "8"); + run_together_limit_ = 8; + } + run_together_min_ = config_->retrieve_int("run-together-min"); + + config_->add_notifier(new ConfigNotifier(this)); + + config_->set_attached(true); + + affix_info = lang_->affix(); + + // + // setup word set lists + // + + typedef Vector<SpellerDict *> AllWS; AllWS all_ws; + for (SpellerDict * i = dicts_; i; i = i->next) { + if (i->dict->basic_type == Dict::basic_dict || + i->dict->basic_type == Dict::replacement_dict) { + all_ws.push_back(i); + } + } + + const std::type_info * ti = 0; + while (!all_ws.empty()) + { + AllWS::iterator i0 = all_ws.end(); + int max = -2; + AllWS::iterator i = all_ws.begin(); + for (; i != all_ws.end(); ++i) + { + const Dictionary * ws = (*i)->dict; + if (ti && *ti != typeid(*ws)) continue; + if ((int)ws->size() > max) {max = ws->size(); i0 = i;} + } + + if (i0 == all_ws.end()) {ti = 0; continue;} + + SpellerDict * cur = *i0; + + all_ws.erase(i0); + + ti = &typeid(*cur->dict); + + if (cur->use_to_check) { + check_ws.push_back(cur->dict); + if (cur->dict->affix_compressed) affix_ws.push_back(cur->dict); + } + if (cur->use_to_suggest) { + suggest_ws.push_back(cur->dict); + if (cur->dict->affix_compressed) suggest_affix_ws.push_back(cur->dict); + } + } + fast_scan = suggest_ws.front()->fast_scan; + fast_lookup = suggest_ws.front()->fast_lookup; + have_soundslike = lang_->have_soundslike(); + have_repl = lang_->have_repl(); + invisible_soundslike = suggest_ws.front()->invisible_soundslike; + soundslike_root_only = suggest_ws.front()->soundslike_root_only; + affix_compress = !affix_ws.empty(); + + // + // Setup suggest + // + + PosibErr<Suggest *> pe; + pe = new_default_suggest(this); + if (pe.has_err()) return pe; + suggest_.reset(pe.data); + pe = new_default_suggest(this); + if (pe.has_err()) return pe; + intr_suggest_.reset(pe.data); + + return no_err; + } + + ////////////////////////////////////////////////////////////////////// + // + // SpellerImpl destrution members + // + + SpellerImpl::~SpellerImpl() { + while (dicts_) { + SpellerDict * next = dicts_->next; + delete dicts_; + dicts_ = next; + } + } + + ////////////////////////////////////////////////////////////////////// + // + // SpellerImple setup tokenizer method + // + + void SpellerImpl::setup_tokenizer(Tokenizer * tok) + { + for (int i = 0; i != 256; ++i) + { + tok->char_type_[i].word = lang_->is_alpha(i); + tok->char_type_[i].begin = lang_->special(i).begin; + tok->char_type_[i].middle = lang_->special(i).middle; + tok->char_type_[i].end = lang_->special(i).end; + } + tok->conv_ = to_internal_; + } + + + ////////////////////////////////////////////////////////////////////// + // + // + // + + SpellerDict::SpellerDict(Dict * d) + : dict(d), special_id(none_id), next(0) + { + switch (dict->basic_type) { + case Dict::basic_dict: + use_to_check = true; + use_to_suggest = true; + break; + case Dict::replacement_dict: + use_to_check = false; + use_to_suggest = true; + case Dict::multi_dict: + break; + default: + abort(); + } + save_on_saveall = false; + } + + SpellerDict::SpellerDict(Dict * w, const Config & c, SpecialId id) + : next(0) + { + dict = w; + special_id = id; + switch (id) { + case main_id: + if (dict->basic_type == Dict::basic_dict) { + + use_to_check = true; + use_to_suggest = true; + save_on_saveall = false; + + } else if (dict->basic_type == Dict::replacement_dict) { + + use_to_check = false; + use_to_suggest = false; + save_on_saveall = false; + + } else { + + abort(); + + } + break; + case personal_id: + use_to_check = true; + use_to_suggest = true; + save_on_saveall = true; + break; + case session_id: + use_to_check = true; + use_to_suggest = true; + save_on_saveall = false; + break; + case personal_repl_id: + use_to_check = false; + use_to_suggest = true; + save_on_saveall = c.retrieve_bool("save-repl"); + break; + case none_id: + break; + } + } + + extern "C" + Speller * libaspell_speller_default_LTX_new_speller_class(SpellerLtHandle) + { + return new SpellerImpl(); + } +} + diff --git a/jni/modules/speller/default/speller_impl.hpp b/jni/modules/speller/default/speller_impl.hpp new file mode 100644 index 0000000..342b936 --- /dev/null +++ b/jni/modules/speller/default/speller_impl.hpp @@ -0,0 +1,262 @@ +// Aspell main C++ include file +// Copyright 1998-2000 by Kevin Atkinson under the terms of the LGPL. + +#ifndef __aspeller_speller__ +#define __aspeller_speller__ + +#include <vector> + +#include "clone_ptr.hpp" +#include "copy_ptr.hpp" +#include "data.hpp" +#include "enumeration.hpp" +#include "speller.hpp" +#include "check_list.hpp" + +using namespace acommon; + +namespace acommon { + class StringMap; + class Config; + class WordList; +} +// The speller class is responsible for keeping track of the +// dictionaries coming up with suggestions and the like. Its methods +// are NOT meant to be used my multiple threads and/or documents. + +namespace aspeller { + + class Language; + class SensitiveCompare; + class Suggest; + + enum SpecialId {main_id, personal_id, session_id, + personal_repl_id, none_id}; + + struct SpellerDict + { + Dict * dict; + bool use_to_check; + bool use_to_suggest; + bool save_on_saveall; + SpecialId special_id; + SpellerDict * next; + SpellerDict(Dict *); + SpellerDict(Dict *, const Config &, SpecialId id = none_id); + ~SpellerDict() {if (dict) dict->release();} + }; + + class SpellerImpl : public Speller + { + public: + SpellerImpl(); // does not set anything up. + ~SpellerImpl(); + + PosibErr<void> setup(Config *); + + void setup_tokenizer(Tokenizer *); + + // + // Low level Word List Management methods + // + + public: + + typedef Enumeration<Dict *> * WordLists; + + WordLists wordlists() const; + int num_wordlists() const; + + const SpellerDict * locate (const Dict::Id &) const; + + // + // Add a single dictionary that has not been previously added + // + PosibErr<void> add_dict(SpellerDict *); + + PosibErr<const WordList *> personal_word_list () const; + PosibErr<const WordList *> session_word_list () const; + PosibErr<const WordList *> main_word_list () const; + + // + // Language methods + // + + char * to_lower(char *); + + const char * lang_name() const; + + const Language & lang() const {return *lang_;} + + // + // Spelling methods + // + + PosibErr<bool> check(char * word, char * word_end, /* it WILL modify word */ + bool try_uppercase, + unsigned run_together_limit, + CheckInfo *, GuessInfo *); + + PosibErr<bool> check(MutableString word) { + guess_info.reset(); + return check(word.begin(), word.end(), false, + unconditional_run_together_ ? run_together_limit_ : 0, + check_inf, &guess_info); + } + PosibErr<bool> check(ParmString word) + { + std::vector<char> w(word.size()+1); + strncpy(&*w.begin(), word, w.size()); + return check(MutableString(&w.front(), w.size() - 1)); + } + + PosibErr<bool> check(const char * word) {return check(ParmString(word));} + + bool check2(char * word, /* it WILL modify word */ + bool try_uppercase, + CheckInfo & ci, GuessInfo * gi); + + bool check_affix(ParmString word, CheckInfo & ci, GuessInfo * gi); + + bool check_simple(ParmString, WordEntry &); + + const CheckInfo * check_info() { + if (check_inf[0].word) + return check_inf; + else if (guess_info.head) + return guess_info.head; + else + return 0; + } + + // + // High level Word List management methods + // + + PosibErr<void> add_to_personal(MutableString word); + PosibErr<void> add_to_session(MutableString word); + + PosibErr<void> save_all_word_lists(); + + PosibErr<void> clear_session(); + + PosibErr<const WordList *> suggest(MutableString word); + // the suggestion list and the elements in it are only + // valid until the next call to suggest. + + PosibErr<void> store_replacement(MutableString mis, + MutableString cor); + + PosibErr<void> store_replacement(const String & mis, const String & cor, + bool memory); + + // + // Private Stuff (from here to the end of the class) + // + + class DictCollection; + class ConfigNotifier; + + private: + friend class ConfigNotifier; + + CachePtr<const Language> lang_; + CopyPtr<SensitiveCompare> sensitive_compare_; + //CopyPtr<DictCollection> wls_; + ClonePtr<Suggest> suggest_; + ClonePtr<Suggest> intr_suggest_; + unsigned int ignore_count; + bool ignore_repl; + String prev_mis_repl_; + String prev_cor_repl_; + + void operator= (const SpellerImpl &other); + SpellerImpl(const SpellerImpl &other); + + SpellerDict * dicts_; + + Dictionary * personal_; + Dictionary * session_; + ReplacementDict * repl_; + Dictionary * main_; + + public: + // these are public so that other classes and functions can use them, + // DO NOT USE + + const SensitiveCompare & sensitive_compare() const {return *sensitive_compare_;} + + //const DictCollection & data_set_collection() const {return *wls_;} + + PosibErr<void> set_check_lang(ParmString lang, ParmString lang_dir); + + double distance (const char *, const char *, + const char *, const char *) const; + + CheckInfo check_inf[8]; + GuessInfo guess_info; + + SensitiveCompare s_cmp; + SensitiveCompare s_cmp_begin; + SensitiveCompare s_cmp_middle; + SensitiveCompare s_cmp_end; + + typedef Vector<const Dict *> WS; + WS check_ws, affix_ws, suggest_ws, suggest_affix_ws; + + bool unconditional_run_together_; + unsigned int run_together_limit_; + unsigned int run_together_min_; + + bool affix_info, affix_compress; + + bool have_repl; + + bool have_soundslike; + + bool invisible_soundslike, soundslike_root_only; + + bool fast_scan, fast_lookup; + + bool run_together; + + }; + + struct LookupInfo { + SpellerImpl * sp; + enum Mode {Word, Guess, Clean, Soundslike, AlwaysTrue} mode; + SpellerImpl::WS::const_iterator begin; + SpellerImpl::WS::const_iterator end; + inline LookupInfo(SpellerImpl * s, Mode m); + // returns 0 if nothing found + // 1 if a match is found + // -1 if a word is found but affix doesn't match and "gi" + int lookup (ParmString word, const SensitiveCompare * c, char aff, + WordEntry & o, GuessInfo * gi) const; + }; + + inline LookupInfo::LookupInfo(SpellerImpl * s, Mode m) + : sp(s), mode(m) + { + switch (m) { + case Word: + begin = sp->affix_ws.begin(); + end = sp->affix_ws.end(); + return; + case Guess: + begin = sp->check_ws.begin(); + end = sp->check_ws.end(); + mode = Word; + return; + case Clean: + case Soundslike: + begin = sp->suggest_affix_ws.begin(); + end = sp->suggest_affix_ws.end(); + return; + case AlwaysTrue: + return; + } + } +} + +#endif diff --git a/jni/modules/speller/default/speller_impl.lo b/jni/modules/speller/default/speller_impl.lo new file mode 100644 index 0000000..afd434f --- /dev/null +++ b/jni/modules/speller/default/speller_impl.lo @@ -0,0 +1,12 @@ +# modules/speller/default/speller_impl.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/speller_impl.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/suggest.cpp b/jni/modules/speller/default/suggest.cpp new file mode 100644 index 0000000..92da127 --- /dev/null +++ b/jni/modules/speller/default/suggest.cpp @@ -0,0 +1,1430 @@ +// Copyright 2000-2005 by Kevin Atkinson under the terms of the LGPL + +// suggest.cpp Suggestion code for Aspell + +// The magic behind my spell checker comes from merging Lawrence +// Philips excellent metaphone algorithm and Ispell's near miss +// strategy which is inserting a space or hyphen, interchanging two +// adjacent letters, changing one letter, deleting a letter, or adding +// a letter. +// +// The process goes something like this. +// +// 1. Convert the misspelled word to its soundslike equivalent (its +// metaphone for English words). +// +// 2. Find words that have the same soundslike pattern. +// +// 3. Find words that have similar soundslike patterns. A similar +// soundlike pattern is a pattern that is obtained by +// interchanging two adjacent letters, changing one letter, +// deleting a letter, or adding a letter. +// +// 4. Score the result list and return the words with the lowest +// score. The score is roughly the weighed average of the edit +// distance of the word to the misspelled word, the soundslike +// equivalent of the two words, and the phoneme of the two words. +// The edit distance is the weighed total of the number of +// deletions, insertions, exchanges, or adjacent swaps needed to +// make one string equivalent to the other. +// +// Please note that the soundlike equivalent is a rough approximation +// of how the words sounds. It is not the phoneme of the word by any +// means. For more information on the metaphone algorithm please see +// the file metaphone.cc which included a detailed description of it. +// +// NOTE: It is assumed that that strlen(soundslike) <= strlen(word) +// for any possible word + +// POSSIBLE OPTIMIZATION: +// store the number of letters that are the same as the previous +// soundslike so that it can possible be skipped + +#include "getdata.hpp" + +#include "fstream.hpp" + +#include "speller_impl.hpp" +#include "asuggest.hpp" +#include "basic_list.hpp" +#include "clone_ptr-t.hpp" +#include "config.hpp" +#include "data.hpp" +#include "editdist.hpp" +#include "editdist2.hpp" +#include "errors.hpp" +#include "file_data_util.hpp" +#include "hash-t.hpp" +#include "language.hpp" +#include "leditdist.hpp" +#include "speller_impl.hpp" +#include "stack_ptr.hpp" +#include "suggest.hpp" +#include "vararray.hpp" +#include "string_list.hpp" + +#include "gettext.h" + +//#include "iostream.hpp" +//#define DEBUG_SUGGEST + +using namespace aspeller; +using namespace acommon; +using namespace std; + +namespace { + + typedef vector<String> NearMissesFinal; + + template <class Iterator> + inline Iterator preview_next (Iterator i) { + return ++i; + } + + // + // OriginalWord stores infomation about the original misspelled word + // for convince and speed. + // + struct OriginalWord { + String word; + String lower; + String clean; + String soundslike; + CasePattern case_pattern; + OriginalWord() {} + }; + + // + // struct ScoreWordSound - used for storing the possible words while + // they are being processed. + // + + struct ScoreWordSound { + char * word; + char * word_clean; + //unsigned word_size; + const char * soundslike; + int score; + int word_score; + int soundslike_score; + bool count; + WordEntry * repl_list; + ScoreWordSound() {repl_list = 0;} + ~ScoreWordSound() {delete repl_list;} + }; + + inline int compare (const ScoreWordSound &lhs, + const ScoreWordSound &rhs) + { + int temp = lhs.score - rhs.score; + if (temp) return temp; + return strcmp(lhs.word,rhs.word); + } + + inline bool operator < (const ScoreWordSound & lhs, + const ScoreWordSound & rhs) { + return compare(lhs, rhs) < 0; + } + + inline bool operator <= (const ScoreWordSound & lhs, + const ScoreWordSound & rhs) { + return compare(lhs, rhs) <= 0; + } + + inline bool operator == (const ScoreWordSound & lhs, + const ScoreWordSound & rhs) { + return compare(lhs, rhs) == 0; + } + + typedef BasicList<ScoreWordSound> NearMisses; + + class Score { + protected: + const Language * lang; + OriginalWord original; + const SuggestParms * parms; + + public: + Score(const Language *l, const String &w, const SuggestParms * p) + : lang(l), original(), parms(p) + { + original.word = w; + l->to_lower(original.lower, w.str()); + l->to_clean(original.clean, w.str()); + l->to_soundslike(original.soundslike, w.str()); + original.case_pattern = l->case_pattern(w); + + } + void fix_case(char * str) { + lang->LangImpl::fix_case(original.case_pattern, str, str); + } + const char * fix_case(const char * str, String & buf) { + return lang->LangImpl::fix_case(original.case_pattern, str, buf); + } + }; + + class Working : public Score { + + int threshold; + int try_harder; + + EditDist (* edit_dist_fun)(const char *, const char *, + const EditDistanceWeights &); + + unsigned int max_word_length; + + SpellerImpl * sp; + NearMisses scored_near_misses; + NearMisses near_misses; + NearMissesFinal * near_misses_final; + + char * temp_end; + + ObjStack buffer; + ObjStack temp_buffer; + + static const bool do_count = true; + static const bool dont_count = false; + + CheckInfo check_info[8]; + + void commit_temp(const char * b) { + if (temp_end) { + buffer.resize_temp(temp_end - b + 1); + buffer.commit_temp(); + temp_end = 0; }} + void abort_temp() { + buffer.abort_temp(); + temp_end = 0;} + const char * to_soundslike_temp(const char * w, unsigned s, unsigned * len = 0) { + char * sl = (char *)buffer.alloc_temp(s + 1); + temp_end = lang->LangImpl::to_soundslike(sl, w, s); + if (len) *len = temp_end - sl; + return sl;} + const char * to_soundslike_temp(const WordEntry & sw) { + char * sl = (char *)buffer.alloc_temp(sw.word_size + 1); + temp_end = lang->LangImpl::to_soundslike(sl, sw.word, sw.word_size, sw.word_info); + if (temp_end == 0) return sw.word; + else return sl;} + const char * to_soundslike(const char * w, unsigned s) { + char * sl = (char *)buffer.alloc_temp(s + 1); + temp_end = lang->LangImpl::to_soundslike(sl, w, s); + commit_temp(sl); + return sl;} + + MutableString form_word(CheckInfo & ci); + void try_word_n(ParmString str, int score); + bool check_word_s(ParmString word, CheckInfo * ci); + unsigned check_word(char * word, char * word_end, CheckInfo * ci, + /* it WILL modify word */ + unsigned pos = 1); + void try_word_c(char * word, char * word_end, int score); + + void try_word(char * word, char * word_end, int score) { + if (sp->unconditional_run_together_) + try_word_c(word,word_end,score); + else + try_word_n(word,score); + } + + void add_sound(SpellerImpl::WS::const_iterator i, + WordEntry * sw, const char * sl, int score = -1); + void add_nearmiss(char * word, unsigned word_size, WordInfo word_info, + const char * sl, + int w_score, int sl_score, + bool count = do_count, WordEntry * rl = 0); + void add_nearmiss(SpellerImpl::WS::const_iterator, const WordEntry & w, + const char * sl, + int w_score, int sl_score, bool count = do_count); + void add_nearmiss(SpellerImpl::WS::const_iterator, const WordAff * w, + const char * sl, + int w_score, int sl_score, bool count = do_count); + bool have_score(int score) {return score < LARGE_NUM;} + int needed_level(int want, int soundslike_score) { + int n = (100*want - parms->soundslike_weight*soundslike_score) + /(parms->word_weight*parms->edit_distance_weights.min); + return n > 0 ? n : 0; + } + int weighted_average(int soundslike_score, int word_score) { + return (parms->word_weight*word_score + + parms->soundslike_weight*soundslike_score)/100; + } + int skip_first_couple(NearMisses::iterator & i) { + int k = 0; + InsensitiveCompare cmp(lang); + const char * prev_word = ""; + while (preview_next(i) != scored_near_misses.end()) + // skip over the first couple of items as they should + // not be counted in the threshold score. + { + if (!i->count || cmp(prev_word, i->word) == 0) { + ++i; + } else if (k == parms->skip) { + break; + } else { + prev_word = i->word; + ++k; + ++i; + } + } + return k; + } + + void try_split(); + void try_one_edit_word(); + void try_scan(); + void try_scan_root(); + void try_repl(); + void try_ngram(); + + void score_list(); + void fine_tune_score(); + void transfer(); + public: + Working(SpellerImpl * m, const Language *l, + const String & w, const SuggestParms * p) + : Score(l,w,p), threshold(1), max_word_length(0), sp(m) { + memset(check_info, 0, sizeof(check_info)); + } + void get_suggestions(NearMissesFinal &sug); + }; + + void Working::get_suggestions(NearMissesFinal & sug) { + + if (original.word.size() * parms->edit_distance_weights.max >= 0x8000) + return; // to prevent overflow in the editdist functions + + near_misses_final = & sug; + + try_split(); + + if (parms->use_repl_table) { + +#ifdef DEBUG_SUGGEST + COUT.printl("TRYING REPLACEMENT TABLE"); +#endif + + try_repl(); + } + + if (parms->try_one_edit_word) { + +#ifdef DEBUG_SUGGEST + COUT.printl("TRYING ONE EDIT WORD"); +#endif + + try_one_edit_word(); + + if (parms->check_after_one_edit_word) { + score_list(); + if (try_harder <= 0) goto done; + } + + } + + if (parms->try_scan_1) { + +#ifdef DEBUG_SUGGEST + COUT.printl("TRYING SCAN 1"); +#endif + edit_dist_fun = limit1_edit_distance; + + if (sp->soundslike_root_only) + try_scan_root(); + else + try_scan(); + + score_list(); + + if (try_harder <= 0) goto done; + + } + + if (parms->try_scan_2) { + +#ifdef DEBUG_SUGGEST + COUT.printl("TRYING SCAN 2"); +#endif + + edit_dist_fun = limit2_edit_distance; + + if (sp->soundslike_root_only) + try_scan_root(); + else + try_scan(); + + score_list(); + + if (try_harder < parms->ngram_threshold) goto done; + + } + + if (parms->try_ngram) { + +#ifdef DEBUG_SUGGEST + COUT.printl("TRYING NGRAM"); +#endif + + try_ngram(); + + score_list(); + + } + + done: + + fine_tune_score(); + + transfer(); + } + + // Forms a word by combining CheckInfo fields. + // Will grow the grow the temp in the buffer. The final + // word must be null terminated and commited. + // It returns a MutableString of what was appended to the buffer. + MutableString Working::form_word(CheckInfo & ci) + { + size_t slen = ci.word.size() - ci.pre_strip_len - ci.suf_strip_len; + size_t wlen = slen + ci.pre_add_len + ci.suf_add_len; + char * tmp = (char *)buffer.grow_temp(wlen); + if (ci.pre_add_len) + memcpy(tmp, ci.pre_add, ci.pre_add_len); + memcpy(tmp + ci.pre_add_len, ci.word.str() + ci.pre_strip_len, slen); + if (ci.suf_add_len) + memcpy(tmp + ci.pre_add_len + slen, ci.suf_add, ci.suf_add_len); + return MutableString(tmp,wlen); + } + + void Working::try_word_n(ParmString str, int score) + { + String word; + String buf; + WordEntry sw; + for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin(); + i != sp->suggest_ws.end(); + ++i) + { + (*i)->clean_lookup(str, sw); + for (;!sw.at_end(); sw.adv()) + add_nearmiss(i, sw, 0, score, -1, do_count); + } + if (sp->affix_compress) { + CheckInfo ci; memset(&ci, 0, sizeof(ci)); + bool res = lang->affix()->affix_check(LookupInfo(sp, LookupInfo::Clean), str, ci, 0); + if (!res) return; + form_word(ci); + char * end = (char *)buffer.grow_temp(1); + char * tmp = (char *)buffer.temp_ptr(); + buffer.commit_temp(); + *end = '\0'; + add_nearmiss(tmp, end - tmp, 0, 0, score, -1, do_count); + } + } + + bool Working::check_word_s(ParmString word, CheckInfo * ci) + { + WordEntry sw; + for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin(); + i != sp->suggest_ws.end(); + ++i) + { + (*i)->clean_lookup(word, sw); + if (!sw.at_end()) { + ci->word = sw.word; + return true; + } + } + if (sp->affix_compress) { + return lang->affix()->affix_check(LookupInfo(sp, LookupInfo::Clean), word, *ci, 0); + } + return false; + } + + unsigned Working::check_word(char * word, char * word_end, CheckInfo * ci, + /* it WILL modify word */ + unsigned pos) + { + unsigned res = check_word_s(word, ci); + if (res) return pos + 1; + if (pos + 1 >= sp->run_together_limit_) return 0; + for (char * i = word + sp->run_together_min_; + i <= word_end - sp->run_together_min_; + ++i) + { + char t = *i; + *i = '\0'; + res = check_word_s(word, ci); + *i = t; + if (!res) continue; + res = check_word(i, word_end, ci + 1, pos + 1); + if (res) return res; + } + memset(ci, 0, sizeof(CheckInfo)); + return 0; + } + + void Working::try_word_c(char * word, char * word_end, int score) + { + unsigned res = check_word(word, word_end, check_info); + assert(res <= sp->run_together_limit_); + //CERR.printf(">%s\n", word); + if (!res) return; + buffer.abort_temp(); + MutableString tmp = form_word(check_info[0]); + CasePattern cp = lang->case_pattern(tmp, tmp.size); + for (unsigned i = 1; i <= res; ++i) { + char * t = form_word(check_info[i]); + if (cp == FirstUpper && lang->is_lower(t[1])) + t[0] = lang->to_lower(t[0]); + } + char * end = (char *)buffer.grow_temp(1); + char * beg = (char *)buffer.temp_ptr(); // since the orignal string may of moved + *end = 0; + buffer.commit_temp(); + add_nearmiss(beg, end - beg, 0, 0, score, -1, do_count); + //CERR.printl(tmp); + memset(check_info, 0, sizeof(CheckInfo)*res); + } + + void Working::add_nearmiss(char * word, unsigned word_size, + WordInfo word_info, + const char * sl, + int w_score, int sl_score, + bool count, WordEntry * rl) + { + if (word_size * parms->edit_distance_weights.max >= 0x8000) + return; // to prevent overflow in the editdist functions + + if (w_score < 0) w_score = LARGE_NUM; + if (sl_score < 0) sl_score = LARGE_NUM; + if (!sp->have_soundslike) { + if (w_score >= LARGE_NUM) w_score = sl_score; + else if (sl_score >= LARGE_NUM) sl_score = w_score; + } + + near_misses.push_front(ScoreWordSound()); + ScoreWordSound & d = near_misses.front(); + d.word = word; + d.soundslike = sl; + //d.word_size = word_size; + + if (parms->use_typo_analysis) { + unsigned int l = word_size; + if (l > max_word_length) max_word_length = l; + } + + if (!(word_info & ALL_CLEAN)) { + d.word_clean = (char *)buffer.alloc(word_size + 1); + lang->LangImpl::to_clean((char *)d.word_clean, word); + } else { + d.word_clean = d.word; + } + + if (!sp->have_soundslike && !d.soundslike) + d.soundslike = d.word_clean; + + d.word_score = w_score; + d.soundslike_score = sl_score; + d.count = count; + d.repl_list = rl; + } + + void Working::add_nearmiss(SpellerImpl::WS::const_iterator i, + const WordEntry & w, const char * sl, + int w_score, int sl_score, bool count) + { + assert(w.word_size == strlen(w.word)); + WordEntry * repl = 0; + if (w.what == WordEntry::Misspelled) { + repl = new WordEntry; + const ReplacementDict * repl_dict + = static_cast<const ReplacementDict *>(*i); + repl_dict->repl_lookup(w, *repl); + } + add_nearmiss(buffer.dup(ParmString(w.word, w.word_size)), + w.word_size, w.word_info, + sl, + w_score, sl_score, count, repl); + } + + void Working::add_nearmiss(SpellerImpl::WS::const_iterator i, + const WordAff * w, const char * sl, + int w_score, int sl_score, bool count) + { + add_nearmiss(buffer.dup(w->word), w->word.size, 0, + sl, + w_score, sl_score, count); + } + + void Working::try_split() { + const String & word = original.word; + + if (word.size() < 4 || parms->split_chars.empty()) return; + size_t i = 0; + + String new_word_str; + String buf; + new_word_str.resize(word.size() + 1); + char * new_word = new_word_str.data(); + memcpy(new_word, word.data(), word.size()); + new_word[word.size() + 1] = '\0'; + new_word[word.size() + 0] = new_word[word.size() - 1]; + + for (i = word.size() - 2; i >= 2; --i) { + new_word[i+1] = new_word[i]; + new_word[i] = '\0'; + + if (sp->check(new_word) && sp->check(new_word + i + 1)) { + for (size_t j = 0; j != parms->split_chars.size(); ++j) + { + new_word[i] = parms->split_chars[j]; + add_nearmiss(buffer.dup(new_word), word.size() + 1, 0, 0, + parms->edit_distance_weights.del2*3/2, -1, + dont_count); + } + } + } + } + + void Working::try_one_edit_word() + { + const String & orig = original.clean; + const char * replace_list = lang->clean_chars(); + char a,b; + const char * c; + VARARRAY(char, new_word, orig.size() + 2); + char * new_word_end = new_word + orig.size(); + size_t i; + + memcpy(new_word, orig.str(), orig.size() + 1); + + // Try word as is (in case of case difference etc) + + try_word(new_word, new_word_end, 0); + + // Change one letter + + for (i = 0; i != orig.size(); ++i) { + for (c = replace_list; *c; ++c) { + if (*c == orig[i]) continue; + new_word[i] = *c; + try_word(new_word, new_word_end, parms->edit_distance_weights.sub); + } + new_word[i] = orig[i]; + } + + // Interchange two adjacent letters. + + for (i = 0; i+1 < orig.size(); ++i) { + a = new_word[i]; + b = new_word[i+1]; + new_word[i] = b; + new_word[i+1] = a; + try_word(new_word, new_word_end, parms->edit_distance_weights.swap); + new_word[i] = a; + new_word[i+1] = b; + } + + // Add one letter + + *new_word_end = ' '; + new_word_end++; + *new_word_end = '\0'; + i = new_word_end - new_word - 1; + while(true) { + for (c=replace_list; *c; ++c) { + new_word[i] = *c; + try_word(new_word, new_word_end, parms->edit_distance_weights.del1); + } + if (i == 0) break; + new_word[i] = new_word[i-1]; + --i; + } + + // Delete one letter + + if (orig.size() > 1) { + memcpy(new_word, orig.str(), orig.size() + 1); + new_word_end = new_word + orig.size() - 1; + a = *new_word_end; + *new_word_end = '\0'; + i = orig.size() - 1; + while (true) { + try_word(new_word, new_word_end, parms->edit_distance_weights.del2); + if (i == 0) break; + b = a; + a = new_word[i-1]; + new_word[i-1] = b; + --i; + } + } + } + + void Working::add_sound(SpellerImpl::WS::const_iterator i, + WordEntry * sw, const char * sl, int score) + { + WordEntry w; + (*i)->soundslike_lookup(*sw, w); + + for (; !w.at_end(); w.adv()) { + + add_nearmiss(i, w, sl, -1, score); + + if (w.aff[0]) { + String sl_buf; + temp_buffer.reset(); + WordAff * exp_list; + exp_list = lang->affix()->expand(w.word, w.aff, temp_buffer); + for (WordAff * p = exp_list->next; p; p = p->next) + add_nearmiss(i, p, 0, -1, -1); + } + + } + } + + void Working::try_scan() + { + const char * original_soundslike = original.soundslike.str(); + + WordEntry * sw; + WordEntry w; + const char * sl = 0; + EditDist score; + unsigned int stopped_at = LARGE_NUM; + WordAff * exp_list; + WordAff single; + single.next = 0; + + for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin(); + i != sp->suggest_ws.end(); + ++i) + { + //CERR.printf(">>%p %s\n", *i, typeid(**i).name()); + StackPtr<SoundslikeEnumeration> els((*i)->soundslike_elements()); + + while ( (sw = els->next(stopped_at)) ) { + + //CERR.printf("[%s (%d) %d]\n", sw->word, sw->word_size, sw->what); + //assert(strlen(sw->word) == sw->word_size); + + if (sw->what != WordEntry::Word) { + sl = sw->word; + abort_temp(); + } else if (!*sw->aff) { + sl = to_soundslike_temp(*sw); + } else { + goto affix_case; + } + + //CERR.printf("SL = %s\n", sl); + + score = edit_dist_fun(sl, original_soundslike, parms->edit_distance_weights); + stopped_at = score.stopped_at - sl; + if (score >= LARGE_NUM) continue; + stopped_at = LARGE_NUM; + commit_temp(sl); + add_sound(i, sw, sl, score); + continue; + + affix_case: + + temp_buffer.reset(); + + // first expand any prefixes + if (sp->fast_scan) { // if fast_scan than no prefixes + single.word.str = sw->word; + single.word.size = strlen(sw->word); + single.aff = (const unsigned char *)sw->aff; + exp_list = &single; + } else { + exp_list = lang->affix()->expand_prefix(sw->word, sw->aff, temp_buffer); + } + + // iterate through each semi-expanded word, any affix flags + // are now guaranteed to be suffixes + for (WordAff * p = exp_list; p; p = p->next) + { + // try the root word + unsigned sl_len; + sl = to_soundslike_temp(p->word.str, p->word.size, &sl_len); + score = edit_dist_fun(sl, original_soundslike, parms->edit_distance_weights); + stopped_at = score.stopped_at - sl; + stopped_at += p->word.size - sl_len; + + if (score < LARGE_NUM) { + commit_temp(sl); + add_nearmiss(i, p, sl, -1, score, do_count); + } + + // expand any suffixes, using stopped_at as a hint to avoid + // unneeded expansions. Note stopped_at is the last character + // looked at by limit_edit_dist. Thus if the character + // at stopped_at is changed it might effect the result + // hence the "limit" is stopped_at + 1 + if (p->word.size - lang->affix()->max_strip() > stopped_at) + exp_list = 0; + else + exp_list = lang->affix()->expand_suffix(p->word, p->aff, + temp_buffer, + stopped_at + 1); + + // reset stopped_at if necessary + if (score < LARGE_NUM) stopped_at = LARGE_NUM; + + // iterate through fully expanded words, if any + for (WordAff * q = exp_list; q; q = q->next) { + sl = to_soundslike_temp(q->word.str, q->word.size); + score = edit_dist_fun(sl, original_soundslike, parms->edit_distance_weights); + if (score >= LARGE_NUM) continue; + commit_temp(sl); + add_nearmiss(i, q, sl, -1, score, do_count); + } + } + } + } + } + + void Working::try_scan_root() + { + + WordEntry * sw; + WordEntry w; + const char * sl = 0; + EditDist score; + int stopped_at = LARGE_NUM; + GuessInfo gi; + lang->munch(original.word, &gi); + Vector<const char *> sls; + sls.push_back(original.soundslike.str()); +#ifdef DEBUG_SUGGEST + COUT.printf("will try soundslike: %s\n", sls.back()); +#endif + for (const aspeller::CheckInfo * ci = gi.head; + ci; + ci = ci->next) + { + sl = to_soundslike(ci->word.str(), ci->word.size()); + Vector<const char *>::iterator i = sls.begin(); + while (i != sls.end() && strcmp(*i, sl) != 0) ++i; + if (i == sls.end()) { + sls.push_back(to_soundslike(ci->word.str(), ci->word.size())); +#ifdef DEBUG_SUGGEST + COUT.printf("will try root soundslike: %s\n", sls.back()); +#endif + } + } + const char * * begin = sls.pbegin(); + const char * * end = sls.pend(); + for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin(); + i != sp->suggest_ws.end(); + ++i) + { + StackPtr<SoundslikeEnumeration> els((*i)->soundslike_elements()); + + while ( (sw = els->next(stopped_at)) ) { + + if (sw->what != WordEntry::Word) { + sl = sw->word; + abort_temp(); + } else { + sl = to_soundslike_temp(*sw); + } + + stopped_at = LARGE_NUM; + for (const char * * s = begin; s != end; ++s) { + score = edit_dist_fun(sl, *s, + parms->edit_distance_weights); + if (score.stopped_at - sl < stopped_at) + stopped_at = score.stopped_at - sl; + if (score >= LARGE_NUM) continue; + stopped_at = LARGE_NUM; + commit_temp(sl); + add_sound(i, sw, sl, score); + //CERR.printf("using %s: will add %s with score %d\n", *s, sl, (int)score); + break; + } + } + } + } + + struct ReplTry + { + const char * begin; + const char * end; + const char * repl; + size_t repl_len; + ReplTry(const char * b, const char * e, const char * r) + : begin(b), end(e), repl(r), repl_len(strlen(r)) {} + }; + + void Working::try_repl() + { + String buf; + Vector<ReplTry> repl_try; + StackPtr<SuggestReplEnumeration> els(lang->repl()); + const SuggestRepl * r = 0; + const char * word = original.clean.str(); + const char * wend = word + original.clean.size(); + while (r = els->next(), r) + { + const char * p = word; + while ((p = strstr(p, r->substr))) { + buf.clear(); + buf.append(word, p); + buf.append(r->repl, strlen(r->repl)); + p += strlen(r->substr); + buf.append(p, wend + 1); + buf.ensure_null_end(); + //COUT.printf("%s (%s) => %s (%s)\n", word, r->substr, buf.str(), r->repl); + try_word(buf.pbegin(), buf.pend(), parms->edit_distance_weights.sub*3/2); + } + } + } + + // generate an n-gram score comparing s1 and s2 + static int ngram(int n, char * s1, int l1, const char * s2, int l2) + { + int nscore = 0; + int ns; + for (int j=1;j<=n;j++) { + ns = 0; + for (int i=0;i<=(l1-j);i++) { + char c = *(s1 + i + j); + *(s1 + i + j) = '\0'; + if (strstr(s2,(s1+i))) ns++; + *(s1 + i + j ) = c; + } + nscore = nscore + ns; + if (ns < 2) break; + } + ns = 0; + ns = (l2-l1)-2; + return (nscore - ((ns > 0) ? ns : 0)); + } + + struct NGramScore { + SpellerImpl::WS::const_iterator i; + WordEntry info; + const char * soundslike; + int score; + NGramScore() {} + NGramScore(SpellerImpl::WS::const_iterator i0, + WordEntry info0, const char * sl, int score0) + : i(i0), info(info0), soundslike(sl), score(score0) {} + }; + + + void Working::try_ngram() + { + String original_soundslike = original.soundslike; + original_soundslike.ensure_null_end(); + WordEntry * sw = 0; + const char * sl = 0; + typedef Vector<NGramScore> Candidates; + hash_set<const char *> already_have; + Candidates candidates; + int min_score = 0; + int count = 0; + + for (NearMisses::iterator i = scored_near_misses.begin(); + i != scored_near_misses.end(); ++i) + { + if (!i->soundslike) + i->soundslike = to_soundslike(i->word, strlen(i->word)); + already_have.insert(i->soundslike); + } + + for (SpellerImpl::WS::const_iterator i = sp->suggest_ws.begin(); + i != sp->suggest_ws.end(); + ++i) + { + StackPtr<SoundslikeEnumeration> els((*i)->soundslike_elements()); + + while ( (sw = els->next(LARGE_NUM)) ) { + + if (sw->what != WordEntry::Word) { + abort_temp(); + sl = sw->word; + } else { + sl = to_soundslike_temp(sw->word, sw->word_size); + } + + if (already_have.have(sl)) continue; + + int ng = ngram(3, original_soundslike.data(), original_soundslike.size(), + sl, strlen(sl)); + + if (ng > 0 && ng >= min_score) { + commit_temp(sl); + candidates.push_back(NGramScore(i, *sw, sl, ng)); + if (ng > min_score) count++; + if (count >= parms->ngram_keep) { + int orig_min = min_score; + min_score = LARGE_NUM; + Candidates::iterator i = candidates.begin(); + Candidates::iterator j = candidates.begin(); + for (; i != candidates.end(); ++i) { + if (i->score == orig_min) continue; + if (min_score > i->score) min_score = i->score; + *j = *i; + ++j; + } + count = 0; + candidates.resize(j-candidates.begin()); + for (i = candidates.begin(); i != candidates.end(); ++i) { + if (i->score != min_score) count++; + } + } + } + } + } + + for (Candidates::iterator i = candidates.begin(); + i != candidates.end(); + ++i) + { + //COUT.printf("ngram: %s %d\n", i->soundslike, i->score); + add_sound(i->i, &i->info, i->soundslike); + } + } + + void Working::score_list() { + +# ifdef DEBUG_SUGGEST + COUT.printl("SCORING LIST"); +# endif + + try_harder = 3; + if (near_misses.empty()) return; + + NearMisses::iterator i; + NearMisses::iterator prev; + + near_misses.push_front(ScoreWordSound()); + // the first item will NEVER be looked at. + scored_near_misses.push_front(ScoreWordSound()); + scored_near_misses.front().score = -1; + // this item will only be looked at when sorting so + // make it a small value to keep it at the front. + + int try_for = (parms->word_weight*parms->edit_distance_weights.max)/100; + while (true) { + try_for += (parms->word_weight*parms->edit_distance_weights.max)/100; + + // put all pairs whose score <= initial_limit*max_weight + // into the scored list + + prev = near_misses.begin(); + i = prev; + ++i; + while (i != near_misses.end()) { + + //CERR.printf("%s %s %s %d %d\n", i->word, i->word_clean, i->soundslike, + // i->word_score, i->soundslike_score); + + if (i->word_score >= LARGE_NUM) { + int sl_score = i->soundslike_score < LARGE_NUM ? i->soundslike_score : 0; + int level = needed_level(try_for, sl_score); + + if (level >= int(sl_score/parms->edit_distance_weights.min)) + i->word_score = edit_distance(original.clean, + i->word_clean, + level, level, + parms->edit_distance_weights); + } + + if (i->word_score >= LARGE_NUM) goto cont1; + + if (i->soundslike_score >= LARGE_NUM) + { + if (weighted_average(0, i->word_score) > try_for) goto cont1; + + if (i->soundslike == 0) i->soundslike = to_soundslike(i->word, strlen(i->word)); + + i->soundslike_score = edit_distance(original.soundslike, i->soundslike, + parms->edit_distance_weights); + } + + i->score = weighted_average(i->soundslike_score, i->word_score); + + if (i->score > try_for + parms->span) goto cont1; + + //CERR.printf("2>%s %s %s %d %d\n", i->word, i->word_clean, i->soundslike, + // i->word_score, i->soundslike_score); + + scored_near_misses.splice_into(near_misses,prev,i); + + i = prev; // Yes this is right due to the slice + ++i; + + continue; + + cont1: + prev = i; + ++i; + } + + scored_near_misses.sort(); + + i = scored_near_misses.begin(); + ++i; + + if (i == scored_near_misses.end()) continue; + + int k = skip_first_couple(i); + + if ((k == parms->skip && i->score <= try_for) + || prev == near_misses.begin() ) // or no more left in near_misses + break; + } + + threshold = i->score + parms->span; + if (threshold < parms->edit_distance_weights.max) + threshold = parms->edit_distance_weights.max; + +# ifdef DEBUG_SUGGEST + COUT << "Threshold is: " << threshold << "\n"; + COUT << "try_for: " << try_for << "\n"; + COUT << "Size of scored: " << scored_near_misses.size() << "\n"; + COUT << "Size of ! scored: " << near_misses.size() << "\n"; +# endif + + //if (threshold - try_for <= parms->edit_distance_weights.max/2) return; + + prev = near_misses.begin(); + i = prev; + ++i; + while (i != near_misses.end()) { + + if (i->word_score >= LARGE_NUM) { + + int sl_score = i->soundslike_score < LARGE_NUM ? i->soundslike_score : 0; + int initial_level = needed_level(try_for, sl_score); + int max_level = needed_level(threshold, sl_score); + + if (initial_level < max_level) + i->word_score = edit_distance(original.clean.c_str(), + i->word_clean, + initial_level+1,max_level, + parms->edit_distance_weights); + } + + if (i->word_score >= LARGE_NUM) goto cont2; + + if (i->soundslike_score >= LARGE_NUM) + { + if (weighted_average(0, i->word_score) > threshold) goto cont2; + + if (i->soundslike == 0) + i->soundslike = to_soundslike(i->word, strlen(i->word)); + + i->soundslike_score = edit_distance(original.soundslike, i->soundslike, + parms->edit_distance_weights); + } + + i->score = weighted_average(i->soundslike_score, i->word_score); + + if (i->score > threshold + parms->span) goto cont2; + + scored_near_misses.splice_into(near_misses,prev,i); + + i = prev; // Yes this is right due to the slice + ++i; + + continue; + + cont2: + prev = i; + ++i; + + } + + near_misses.pop_front(); + + scored_near_misses.sort(); + scored_near_misses.pop_front(); + + if (near_misses.empty()) { + try_harder = 1; + } else { + i = scored_near_misses.begin(); + skip_first_couple(i); + ++i; + try_harder = i == scored_near_misses.end() ? 2 : 0; + } + +# ifdef DEBUG_SUGGEST + COUT << "Size of scored: " << scored_near_misses.size() << "\n"; + COUT << "Size of ! scored: " << near_misses.size() << "\n"; + COUT << "Try Harder: " << try_harder << "\n"; +# endif + } + + void Working::fine_tune_score() { + + NearMisses::iterator i; + + if (parms->use_typo_analysis) { + int max = 0; + unsigned int j; + + CharVector orig_norm, word; + orig_norm.resize(original.word.size() + 1); + for (j = 0; j != original.word.size(); ++j) + orig_norm[j] = parms->ti->to_normalized(original.word[j]); + orig_norm[j] = 0; + ParmString orig(orig_norm.data(), j); + word.resize(max_word_length + 1); + + for (i = scored_near_misses.begin(); + i != scored_near_misses.end() && i->score <= threshold; + ++i) + { + for (j = 0; (i->word)[j] != 0; ++j) + word[j] = parms->ti->to_normalized((i->word)[j]); + word[j] = 0; + int word_score + = typo_edit_distance(ParmString(word.data(), j), orig, *parms->ti); + i->score = weighted_average(i->soundslike_score, word_score); + if (max < i->score) max = i->score; + } + threshold = max; + for (;i != scored_near_misses.end() && i->score <= threshold; ++i) + i->score = threshold + 1; + + scored_near_misses.sort(); + } + } + + void Working::transfer() { + +# ifdef DEBUG_SUGGEST + COUT << "\n" << "\n" + << original.word << '\t' + << original.soundslike << '\t' + << "\n"; + String sl; +# endif + int c = 1; + hash_set<String,HashString<String> > duplicates_check; + String buf; + String final_word; + pair<hash_set<String,HashString<String> >::iterator, bool> dup_pair; + for (NearMisses::const_iterator i = scored_near_misses.begin(); + i != scored_near_misses.end() && c <= parms->limit + && ( i->score <= threshold || c <= 3 ); + ++i, ++c) { +# ifdef DEBUG_SUGGEST + //COUT.printf("%p %p: ", i->word, i->soundslike); + COUT << i->word << '\t' << i->score + << '\t' << i->soundslike << "\n"; +# endif + if (i->repl_list != 0) { + String::size_type pos; + do { + dup_pair = duplicates_check.insert(fix_case(i->repl_list->word, buf)); + if (dup_pair.second && + ((pos = dup_pair.first->find(' '), pos == String::npos) + ? (bool)sp->check(*dup_pair.first) + : (sp->check((String)dup_pair.first->substr(0,pos)) + && sp->check((String)dup_pair.first->substr(pos+1))) )) + near_misses_final->push_back(*dup_pair.first); + } while (i->repl_list->adv()); + } else { + fix_case(i->word); + dup_pair = duplicates_check.insert(i->word); + if (dup_pair.second ) + near_misses_final->push_back(*dup_pair.first); + } + } + } + + class SuggestionListImpl : public SuggestionList { + struct Parms { + typedef const char * Value; + typedef NearMissesFinal::const_iterator Iterator; + Iterator end; + Parms(Iterator e) : end(e) {} + bool endf(Iterator e) const {return e == end;} + Value end_state() const {return 0;} + Value deref(Iterator i) const {return i->c_str();} + }; + public: + NearMissesFinal suggestions; + + SuggestionList * clone() const {return new SuggestionListImpl(*this);} + void assign(const SuggestionList * other) { + *this = *static_cast<const SuggestionListImpl *>(other); + } + + bool empty() const { return suggestions.empty(); } + Size size() const { return suggestions.size(); } + VirEmul * elements() const { + return new MakeEnumeration<Parms, StringEnumeration> + (suggestions.begin(), Parms(suggestions.end())); + } + }; + + class SuggestImpl : public Suggest { + SpellerImpl * speller_; + SuggestionListImpl suggestion_list; + SuggestParms parms_; + public: + PosibErr<void> setup(SpellerImpl * m); + //SuggestImpl(SpellerImpl * m, const SuggestParms & p) + // : speller_(m), parms_(p) + //{parms_.fill_distance_lookup(m->config(), m->lang());} + PosibErr<void> set_mode(ParmString mode) { + return parms_.set(mode, speller_); + } + double score(const char *base, const char *other) { + //parms_.set_original_size(strlen(base)); + //Score s(&speller_->lang(),base,parms_); + //string sl = speller_->lang().to_soundslike(other); + //ScoreWordSound sws(other, sl.c_str()); + //s.score(sws); + //return sws.score; + return -1; + } + SuggestionList & suggest(const char * word); + }; + + PosibErr<void> SuggestImpl::setup(SpellerImpl * m) + { + speller_ = m; + RET_ON_ERR(parms_.set(m->config()->retrieve("sug-mode"), speller_)); + if (m->config()->have("sug-typo-analysis")) + parms_.use_typo_analysis = m->config()->retrieve_bool("sug-typo-analysis"); + if (m->config()->have("sug-repl-table")) + parms_.use_repl_table = m->config()->retrieve_bool("sug-repl-table"); + + StringList sl; + m->config()->retrieve_list("sug-split-char", &sl); + StringListEnumeration els = sl.elements_obj(); + const char * s; + parms_.split_chars.clear(); + while ((s = els.next()) != 0) { + parms_.split_chars.push_back(*s); + } + + String keyboard = m->config()->retrieve("keyboard"); + if (keyboard == "none") + parms_.use_typo_analysis = false; + else + RET_ON_ERR(aspeller::setup(parms_.ti, m->config(), &m->lang(), keyboard)); + + return no_err; + } + + SuggestionList & SuggestImpl::suggest(const char * word) { +# ifdef DEBUG_SUGGEST + COUT << "=========== begin suggest " << word << " ===========\n"; +# endif + parms_.set_original_word_size(strlen(word)); + suggestion_list.suggestions.resize(0); + Working sug(speller_, &speller_->lang(),word,&parms_); + sug.get_suggestions(suggestion_list.suggestions); +# ifdef DEBUG_SUGGEST + COUT << "^^^^^^^^^^^ end suggest " << word << " ^^^^^^^^^^^\n"; +# endif + return suggestion_list; + } + +} + +namespace aspeller { + PosibErr<Suggest *> new_default_suggest(SpellerImpl * m) { + StackPtr<SuggestImpl> s(new SuggestImpl); + RET_ON_ERR(s->setup(m)); + return s.release(); + } + + //Suggest * new_default_suggest(SpellerImpl * m, const SuggestParms & p) { + // return new aspeller_default_suggest::SuggestImpl(m,p); + //} + + PosibErr<void> SuggestParms::set(ParmString mode, SpellerImpl * sp) { + + edit_distance_weights.del1 = 95; + edit_distance_weights.del2 = 95; + edit_distance_weights.swap = 90; + edit_distance_weights.sub = 100; + edit_distance_weights.similar = 10; + edit_distance_weights.max = 100; + edit_distance_weights.min = 90; + + normal_soundslike_weight = 50; + small_word_soundslike_weight = 15; + small_word_threshold = 4; + + soundslike_weight = normal_soundslike_weight; + word_weight = 100 - normal_soundslike_weight; + + split_chars = " -"; + + skip = 2; + limit = 100; + span = 50; + ngram_keep = 10; + use_typo_analysis = true; + use_repl_table = sp->have_repl; + try_one_edit_word = true; // always a good idea, even when + // soundslike lookup is used + check_after_one_edit_word = false; + ngram_threshold = 2; + if (mode == "ultra") { + try_scan_1 = true; + try_scan_2 = false; + try_ngram = false; + } else if (mode == "fast") { + try_scan_1 = true; + try_scan_2 = false; + try_ngram = false; + } else if (mode == "normal") { + try_scan_1 = true; + try_scan_2 = true; + try_ngram = false; + } else if (mode == "slow") { + try_scan_1 = false; + try_scan_2 = true; + try_ngram = true; + ngram_threshold = sp->have_soundslike ? 1 : 2; + } else if (mode == "bad-spellers") { + try_scan_1 = false; + try_scan_2 = true; + try_ngram = true; + use_typo_analysis = false; + normal_soundslike_weight = 55; + small_word_threshold = 0; + span = 125; + limit = 1000; + ngram_threshold = 1; + } else { + return make_err(bad_value, "sug-mode", mode, _("one of ultra, fast, normal, slow, or bad-spellers")); + } + if (!sp->have_soundslike) { + // in this case try_scan_1 will not get better results than + // try_one_edit_word + if (try_scan_1) { + check_after_one_edit_word = true; + try_scan_1 = false; + } + } + + return no_err; + } + + + SuggestParms * SuggestParms::clone() const { + return new SuggestParms(*this); + } + + void SuggestParms::set_original_word_size(int size) { + if (size <= small_word_threshold) { + soundslike_weight = small_word_soundslike_weight; + } else { + soundslike_weight = normal_soundslike_weight; + } + word_weight = 100 - soundslike_weight; + } +} diff --git a/jni/modules/speller/default/suggest.hpp b/jni/modules/speller/default/suggest.hpp new file mode 100644 index 0000000..5fc6280 --- /dev/null +++ b/jni/modules/speller/default/suggest.hpp @@ -0,0 +1,44 @@ +// Copyright 2000 by Kevin Atkinson under the terms of the LGPL + +#ifndef ASPELLER_SUGGEST__HPP +#define ASPELLER_SUGGEST__HPP + +#include "word_list.hpp" +#include "enumeration.hpp" +#include "parm_string.hpp" + +using namespace acommon; + +namespace aspeller { + + class SpellerImpl; + + class SuggestionList : public WordList { + public: + typedef StringEnumeration VirEmul; + typedef Enumeration<VirEmul> Emul; + typedef const char * Value; + typedef unsigned int Size; + + virtual SuggestionList * clone() const = 0; + virtual void assign(const SuggestionList *) = 0; + + virtual bool empty() const = 0; + virtual Size size() const = 0; + virtual VirEmul * elements() const = 0; + virtual ~SuggestionList() {} + }; + + class Suggest { + public: + virtual PosibErr<void> set_mode(ParmString) = 0; + virtual double score(const char * base, const char * other) = 0; + virtual SuggestionList & suggest(const char * word) = 0; + virtual ~Suggest() {} + }; + + PosibErr<Suggest *> new_default_suggest(SpellerImpl *); +} + + +#endif diff --git a/jni/modules/speller/default/suggest.lo b/jni/modules/speller/default/suggest.lo new file mode 100644 index 0000000..1dd8aad --- /dev/null +++ b/jni/modules/speller/default/suggest.lo @@ -0,0 +1,12 @@ +# modules/speller/default/suggest.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/suggest.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/typo_editdist.cpp b/jni/modules/speller/default/typo_editdist.cpp new file mode 100644 index 0000000..cd5e7bf --- /dev/null +++ b/jni/modules/speller/default/typo_editdist.cpp @@ -0,0 +1,196 @@ + +#include <cstring> + +#include "vararray.hpp" +#include "typo_editdist.hpp" +#include "config.hpp" +#include "language.hpp" +#include "file_data_util.hpp" +#include "getdata.hpp" +#include "cache-t.hpp" +#include "asc_ctype.hpp" + +// edit_distance is implemented using a straight forward dynamic +// programming algorithm with out any special tricks. Its space +// usage AND running time is tightly asymptotically bounded by +// strlen(a)*strlen(b) + +typedef unsigned char uchar; + +namespace aspeller { + + using namespace std; + + short typo_edit_distance(ParmString word0, + ParmString target0, + const TypoEditDistanceInfo & w) + { + int word_size = word0.size() + 1; + int target_size = target0.size() + 1; + const uchar * word = reinterpret_cast<const uchar *>(word0.str()); + const uchar * target = reinterpret_cast<const uchar *>(target0.str()); + VARARRAY(short, e_d, word_size * target_size); + ShortMatrix e(word_size,target_size, e_d); + e(0,0) = 0; + for (int j = 1; j != target_size; ++j) + e(0,j) = e(0,j-1) + w.missing; + --word; + --target; + short te; + for (int i = 1; i != word_size; ++i) { + e(i,0) = e(i-1,0) + w.extra_dis2; + for (int j = 1; j != target_size; ++j) { + + if (word[i] == target[j]) { + + e(i,j) = e(i-1,j-1); + + } else { + + te = e(i,j) = e(i-1,j-1) + w.repl(word[i],target[j]); + + if (i != 1) { + te = e(i-1,j ) + w.extra(word[i-1], target[j]); + if (te < e(i,j)) e(i,j) = te; + te = e(i-2,j-1) + w.extra(word[i-1], target[j]) + + w.repl(word[i] , target[j]); + if (te < e(i,j)) e(i,j) = te; + } else { + te = e(i-1,j) + w.extra_dis2; + if (te < e(i,j)) e(i,j) = te; + } + + te = e(i,j-1) + w.missing; + if (te < e(i,j)) e(i,j) = te; + + //swap + if (i != 1 && j != 1) { + te = e(i-2,j-2) + w.swap + + w.repl(word[i], target[j-1]) + + w.repl(word[i-1], target[j]); + if (te < e(i,j)) e(i,j) = te; + } + } + } + } + return e(word_size-1,target_size-1); + } + + static GlobalCache<TypoEditDistanceInfo> typo_edit_dist_info_cache("keyboard"); + + PosibErr<void> setup(CachePtr<const TypoEditDistanceInfo> & res, + const Config * c, const Language * l, ParmString kb) + { + PosibErr<TypoEditDistanceInfo *> pe = get_cache_data(&typo_edit_dist_info_cache, c, l, kb); + if (pe.has_err()) return pe; + res.reset(pe.data); + return no_err; + } + + struct CharPair { + char d[2]; + CharPair(char a, char b) {d[0] = a; d[1] = b;} + }; + + PosibErr<TypoEditDistanceInfo *> + TypoEditDistanceInfo::get_new(const char * kb, const Config * cfg, const Language * l) + { + FStream in; + String file, dir1, dir2; + fill_data_dir(cfg, dir1, dir2); + find_file(file, dir1, dir2, kb, ".kbd"); + RET_ON_ERR(in.open(file.c_str(), "r")); + + ConvEC iconv; + RET_ON_ERR(iconv.setup(*cfg, "utf-8", l->charmap(), NormFrom)); + + Vector<CharPair> data; + + char to_stripped[256]; + for (int i = 0; i <= 255; ++i) + to_stripped[i] = l->to_stripped(i); + + String buf; + DataPair d; + while (getdata_pair(in, d, buf)) { + if (d.key == "key") { + PosibErr<char *> pe(iconv(d.value.str, d.value.size)); + if (pe.has_err()) + return pe.with_file(file, d.line_num); + char * v = pe.data; + char base = *v; + while (*v) { + to_stripped[(uchar)*v] = base; + ++v; + while (asc_isspace(*v)) ++v; + } + } else { + PosibErr<char *> pe(iconv(d.key.str, d.key.size)); + if (pe.has_err()) + return pe.with_file(file, d.line_num); + char * v = pe.data; + if (strlen(v) != 2) + return make_err(invalid_string, d.key.str).with_file(file, d.line_num); + to_stripped[(uchar)v[0]] = v[0]; + to_stripped[(uchar)v[1]] = v[1]; + data.push_back(CharPair(v[0], v[1])); + } + } + + TypoEditDistanceInfo * w = new TypoEditDistanceInfo(); + w->keyboard = kb; + + memset(w->to_normalized_, 0, sizeof(w->to_normalized_)); + + int c = 1; + for (int i = 0; i <= 255; ++i) { + if (l->is_alpha(i)) { + if (w->to_normalized_[(uchar)to_stripped[i]] == 0) { + w->to_normalized_[i] = c; + w->to_normalized_[(uchar)to_stripped[i]] = c; + ++c; + } else { + w->to_normalized_[i] = w->to_normalized_[(uchar)to_stripped[i]]; + } + } + } + for (int i = 0; i != 256; ++i) { + if (w->to_normalized_[i]==0) w->to_normalized_[i] = c; + } + w->max_normalized = c; + + c = w->max_normalized + 1; + int cc = c * c; + w->data = (short *)malloc(cc * 2 * sizeof(short)); + w->repl .init(c, c, w->data); + w->extra.init(c, c, w->data + cc); + + for (int i = 0; i != c; ++i) { + for (int j = 0; j != c; ++j) { + w->repl (i,j) = w->repl_dis2; + w->extra(i,j) = w->extra_dis2; + } + } + + for (unsigned i = 0; i != data.size(); ++i) { + const char * d = data[i].d; + w->repl (w->to_normalized(d[0]), + w->to_normalized(d[1])) = w->repl_dis1; + w->repl (w->to_normalized(d[1]), + w->to_normalized(d[0])) = w->repl_dis1; + w->extra(w->to_normalized(d[0]), + w->to_normalized(d[1])) = w->extra_dis1; + w->extra(w->to_normalized(d[1]), + w->to_normalized(d[0])) = w->extra_dis1; + } + + for (int i = 0; i != c; ++i) { + w->repl(i,i) = 0; + w->extra(i,i) = w->extra_dis1; + } + + return w; + } + + +} diff --git a/jni/modules/speller/default/typo_editdist.hpp b/jni/modules/speller/default/typo_editdist.hpp new file mode 100644 index 0000000..f64d2a5 --- /dev/null +++ b/jni/modules/speller/default/typo_editdist.hpp @@ -0,0 +1,78 @@ +#ifndef __aspeller_typo_edit_distance_hh__ +#define __aspeller_typo_edit_distance_hh__ + +#include "cache.hpp" +#include "matrix.hpp" + +namespace acommon { + class Config; +} + +namespace aspeller { + + class Language; + + using namespace acommon; + + struct TypoEditDistanceInfo : public Cacheable { + int missing; // the cost of having to insert a character + int swap; // the cost of swapping two adjecent letters + short * data; // memory for repl and extra + ShortMatrix repl; // the cost of replacing one letter with another + ShortMatrix extra; // the cost of removing an extra letter + + int repl_dis1; // the cost of replace when the distance is 1 + int repl_dis2; // " " otherwise + int extra_dis1;// + int extra_dis2;// + + unsigned char to_normalized_[256]; + int max_normalized; + + unsigned char to_normalized(char c) const { + return to_normalized_[(unsigned char)c];} + + // IMPORTANT: It is still necessary to initialize and fill in + // repl and extra + private: + TypoEditDistanceInfo(int m = 85, int s = 60, + int r1 = 70, int r = 110, + int e1 = 70, int e = 100) + : missing(m), swap(s), data(0) + , repl_dis1(r1), repl_dis2(r) + , extra_dis1(e1), extra_dis2(e) + {} + public: + ~TypoEditDistanceInfo() {if (data) free(data);} + + String keyboard; + typedef const Config CacheConfig; + typedef const Language CacheConfig2; + typedef const char * CacheKey; + bool cache_key_eq(const char * kb) const {return keyboard == kb;} + static PosibErr<TypoEditDistanceInfo *> get_new(const char *, const Config *, const Language *); + private: + TypoEditDistanceInfo(const TypoEditDistanceInfo &); + void operator=(const TypoEditDistanceInfo &); + }; + + PosibErr<void> setup(CachePtr<const TypoEditDistanceInfo> & res, + const Config * c, const Language * l, ParmString kb); + + // edit_distance finds the shortest edit distance. + // Preconditions: + // max(strlen(word), strlen(target))*max(of the edit weights) <= 2^15 + // word,target are not null pointers + // w.repl and w.extra are square matrices + // the maximum character value is less than the size of w.repl and w.extra + // Returns: + // the edit distance between a and b + + // the running time is tightly asymptotically bounded by strlen(a)*strlen(b) + + short typo_edit_distance(ParmString word, + ParmString target, + const TypoEditDistanceInfo & w); +} + +#endif diff --git a/jni/modules/speller/default/typo_editdist.lo b/jni/modules/speller/default/typo_editdist.lo new file mode 100644 index 0000000..1b28ab2 --- /dev/null +++ b/jni/modules/speller/default/typo_editdist.lo @@ -0,0 +1,12 @@ +# modules/speller/default/typo_editdist.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/typo_editdist.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/speller/default/vector_hash-t.hpp b/jni/modules/speller/default/vector_hash-t.hpp new file mode 100644 index 0000000..969a80c --- /dev/null +++ b/jni/modules/speller/default/vector_hash-t.hpp @@ -0,0 +1,191 @@ +// Copyright (c) 2000 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef __autil_hash_t_hh__ +#define __autil_hash_t_hh__ + +#include <math.h> + +#include "vector_hash.hpp" +#include "primes.hpp" + +namespace aspeller { + + template <class Parms> + VectorHashTable<Parms>::FindIterator + ::FindIterator(const HashTable * ht, const key_type & k) + : vector(&ht->vector()) + , parms(&ht->parms()) + , key(k) + , i(ht->hash1(k)) + , hash2(ht->hash2(k)) + { + if (!parms->is_nonexistent((*vector)[i]) + && !parms->equal(parms->key((*vector)[i]), key)) + adv(); + } + + template <class Parms> + void VectorHashTable<Parms>::FindIterator::adv() { + do { + i = (i + hash2) % vector->size(); + } while (!parms->is_nonexistent((*vector)[i]) + && !parms->equal(parms->key((*vector)[i]), key)); + } + + template<class Parms> + void VectorHashTable<Parms>::nonexistent_vector() { + vector_iterator vector_end = vector_.end(); + for (vector_iterator i = vector_.begin(); i != vector_end; ++i) { + parms_.make_nonexistent(*i); + } + } + + template<class Parms> + std::pair<typename VectorHashTable<Parms>::iterator, bool> + VectorHashTable<Parms>::insert(const value_type & d) + { + MutableFindIterator j(this, parms_.key(d)); + vector_iterator i = vector_.begin() + j.i; + if (!parms_.is_multi && !j.at_end()) + return std::pair<iterator,bool>(iterator(i,this),false); + if (load_factor() > .92) { + resize(bucket_count()*2); + return insert(d); + } + if (parms_.is_multi) + while(!j.at_end()) j.adv(); + *(vector_.begin() + j.i) = d; + ++size_; + return std::pair<iterator,bool>(iterator(i,this),true); + } + + template<class Parms> + bool VectorHashTable<Parms>::have(const key_type & key) const + { + return !ConstFindIterator(this,key).at_end(); + } + + template<class Parms> + typename VectorHashTable<Parms>::iterator + VectorHashTable<Parms>::find(const key_type & key) + { + MutableFindIterator i(this, key); + if (!i.at_end()) + return iterator(vector_.begin() + i.i, this); + else + return end(); + } + + template<class Parms> + typename VectorHashTable<Parms>::const_iterator + VectorHashTable<Parms>::find(const key_type & key) const { + ConstFindIterator i(this, key); + if (!i.at_end()) + return const_iterator(vector_.begin() + i.i, this); + else + return end(); + } + +#if 0 // it currently doesn't work needs fixing + + template<class Parms> + VectorHashTable<Parms>::size_type + VectorHashTable<Parms>::erase(const key_type & key) { + MutableFindIterator i(this, key); + if (!i.at_end()) { + erase(iterator(vector_.begin() + i.i, this)); + return 1; + } else { + return 0; + } + } + + template<class Parms> + void VectorHashTable<Parms>::erase(const iterator & p) { + vector_iterator pos = p.vector_iterator(); + parms_.make_nonexistent(*pos); + vector_iterator vector_end = vector_.end(); + + vector_iterator e = pos; + do { + ++e; + if (e == vector_end) e = vector_.begin(); + } while (!parms_.is_nonexistent(*e)); + + vector_iterator should_be; + while (pos != e) { + if (parms_.is_nonexistent(*pos)) { + should_be = find_item_v(*pos); + if (parms_.is_nonexistent(*should_be)) { + *should_be = *pos; + parms_.make_nonexistent(*pos); + } + } + ++pos; + if (pos == vector_end) pos = vector_.begin(); + } + --size_; + } +#endif + + template<class Parms> + void VectorHashTable<Parms>::swap(VectorHashTable<Parms> &other) { + vector_.swap(other.vector_); + size_type temp = size_; + size_ = other.size_; + other.size_ = temp; + } + + template<class Parms> + VectorHashTable<Parms>::VectorHashTable(size_type i, const Parms & p) + : parms_(p), size_(0) + { + if (i <= 19) { + i = 19; + } else { + size_type j = ((i - 3)/4)*4 + 3; + if (j == i) + i = j; + else + i = j + 4; + Primes p(static_cast<size_type>(sqrt(static_cast<double>(i))+2)); + for (;;) { + if (i > p.max_num()) + p.resize(static_cast<size_type>(sqrt(static_cast<double>(i))+2)); + if (p.is_prime(i) && p.is_prime(i-2)) + break; + i += 4; + } + } + vector_.resize(i); + nonexistent_vector(); + } + + template<class Parms> + void VectorHashTable<Parms>::resize(size_type i) { + VectorHashTable temp(i,parms_); + iterator e = end(); + for (iterator i = begin(); i != e; ++i) + temp.insert(*i); + swap(temp); + } + + template<class Parms> + void VectorHashTable<Parms>::recalc_size() { + size_ = 0; + for (iterator i = begin(); i != this->e; ++i, ++this->_size); + } + +} + +#endif diff --git a/jni/modules/speller/default/vector_hash.hpp b/jni/modules/speller/default/vector_hash.hpp new file mode 100644 index 0000000..6d6e24d --- /dev/null +++ b/jni/modules/speller/default/vector_hash.hpp @@ -0,0 +1,291 @@ +// Copyright (c) 2000 +// Kevin Atkinson +// +// Permission to use, copy, modify, distribute and sell this software +// and its documentation for any purpose is hereby granted without +// fee, provided that the above copyright notice appear in all copies +// and that both that copyright notice and this permission notice +// appear in supporting documentation. Kevin Atkinson makes no +// representations about the suitability of this software for any +// purpose. It is provided "as is" without express or implied +// warranty. + +#ifndef __aspeller_vector_hash_hh__ +#define __aspeller_vector_hash_hh__ + +//#include <iterator> +//#include <utility> + +#include "settings.h" +#undef REL_OPS_POLLUTION // FIXME + +namespace aspeller { + + // + // This hash table is implemnted as a Open Address Hash Table + // which uses a Vector like object to store its data. So + // it might even be considered an adapter + // + + //////////////////////////////////////////////////////// + // // + // Vector Hash Table Interator // + // // + //////////////////////////////////////////////////////// + // + // This is an internal object and should not be created + // directly. Instead use VectorHashTable::begin() and end() + + template <class Parms> + // Parms is expected to have: + // typename HashTable; + // typename TableIter; + // typename Value; + class VHTIterator + { + template <class T> + friend bool operator== (VHTIterator<T>, VHTIterator<T>); +#ifndef REL_OPS_POLLUTION + template <class T> + friend bool operator!= (VHTIterator<T>, VHTIterator<T>); +#endif + public: //but don't use + typedef typename Parms::TableIter TableIter; + typedef typename Parms::HashTable HashTable; + TableIter pos; + HashTable * hash_table; + public: + //typedef std::bidirectional_iterator_tag iterator_category; + typedef typename Parms::Value value_type; + // these cause problems for SUNPRO_CC + //typedef typename std::iterator_traits<TableIter>::difference_type difference_type; + //typedef typename std::iterator_traits<TableIter>::pointer pointer; + //typedef typename std::iterator_traits<TableIter>::reference reference; + + //VHTIterator vector_iterator() const {return pos;} + public: + VHTIterator(TableIter p, HashTable *ht) : pos(p), hash_table(ht) {} + VHTIterator(TableIter p, HashTable *ht, bool) + : pos(p), hash_table(ht) + { + while (pos != hash_table->vector().end() + && hash_table->parms().is_nonexistent(*pos) ) + ++pos; + } + + value_type & operator * () const {return *pos;} + value_type * operator -> () const {return &*pos;} + + bool at_end() const {return pos == hash_table->vector().end();} + + VHTIterator& operator++ () { + ++pos; + for (;;) { + if (pos == hash_table->vector().end()) break; + if (!hash_table->parms().is_nonexistent(*pos)) break; + ++pos; + } + return *this; + } + VHTIterator operator++ (int) { + VHTIterator temp = *this; + operator++(); + return temp; + } + + VHTIterator& operator-- () { + --pos; + for (;;) { + if (pos < hash_table->vector().begin()) break; + if (!hash_table->parms().is_nonexistent_func(*pos)) break; + --pos; + } + return *this; + } + VHTIterator operator-- (int) { + VHTIterator temp = *this; + operator--(); + return temp; + } + }; + + template <class Parms> + inline + bool operator== (VHTIterator<Parms> rhs, VHTIterator<Parms> lhs) + { + return rhs.pos == lhs.pos; + } + +#ifndef REL_OPS_POLLUTION + + template <class Parms> + inline + bool operator!= (VHTIterator<Parms> rhs, VHTIterator<Parms> lhs) + { + return rhs.pos != lhs.pos; + } + +#endif + + //////////////////////////////////////////////////////// + // // + // Vector Hash Table // + // // + //////////////////////////////////////////////////////// + + // Parms is expected to have the following methods + // typename Vector + // typedef Vector::value_type Value + // typedef Vector::size_type Size + // typename Key + // bool is_multi; + // Size hash(Key) + // bool equal(Key, Key) + // Key key(Value) + // bool is_nonexistent(Value) + // void make_nonexistent(Value &) + + template <class Parms> + class VectorHashTable { + typedef typename Parms::Vector Vector; + public: + typedef typename Parms::Vector vector_type; + typedef typename Vector::value_type value_type; + typedef typename Vector::size_type size_type; + typedef typename Vector::difference_type difference_type; + + typedef typename Vector::pointer pointer; + typedef typename Vector::reference reference; + typedef typename Vector::const_reference const_reference; + + typedef typename Parms::Key key_type; + public: // but don't use + typedef VectorHashTable<Parms> HashTable; + private: + Parms parms_; + + public: + typedef Parms parms_type; + const parms_type & parms() const {return parms_;} + + public: + // These public functions are very dangerous and should be used with + // great care as the modify the internal structure of the object + Vector & vector() {return vector_;} + const Vector & vector() const {return vector_;} + parms_type & parms() {return parms_;} + void recalc_size(); + void set_size(size_type s) {size_ = s;} + + private: + Vector vector_; + size_type size_; + + public: // but don't use + typedef typename Vector::iterator vector_iterator; + typedef typename Vector::const_iterator const_vector_iterator; + + private: + int hash1(const key_type &d) const { + return parms_.hash(d) % bucket_count(); + } + int hash2(const key_type &d) const { + return 1 + (parms_.hash(d) % (bucket_count() - 2)); + } + + struct NonConstParms { + typedef VectorHashTable HashTable; + typedef vector_iterator TableIter; + typedef value_type Value; + }; + struct ConstParms { + typedef const VectorHashTable HashTable; + typedef const_vector_iterator TableIter; + typedef const value_type Value; + }; + public: + typedef VHTIterator<NonConstParms> iterator; + typedef VHTIterator<ConstParms> const_iterator; + + private: + void nonexistent_vector(); + + public: + VectorHashTable(size_type i, const Parms & p = Parms()); + + VectorHashTable(const Parms & p = Parms()) + : parms_(p), vector_(19), size_(0) {nonexistent_vector();} + + iterator begin() {return iterator(vector_.begin(), this, 1);} + iterator end() {return iterator(vector_.end(), this);} + const_iterator begin() const {return const_iterator(vector_.begin(), this, 1);} + const_iterator end() const {return const_iterator(vector_.end(), this);} + + std::pair<iterator, bool> insert(const value_type &); + bool have(const key_type &) const; + + iterator find(const key_type&); + const_iterator find(const key_type&) const; + + size_type erase(const key_type &key); + void erase(const iterator &p); + + size_type size() const {return size_;} + bool empty() const {return !size_;} + + void swap(VectorHashTable &); + void resize(size_type); + size_type bucket_count() const {return vector_.size();} + double load_factor() const {return static_cast<double>(size())/bucket_count();} + + private: + class FindIterator + { + public: // but don't use + const vector_type * vector; + const Parms * parms; + key_type key; + int i; + int hash2; + FindIterator() {} + FindIterator(const HashTable * ht, const key_type & k); + public: + bool at_end() const {return parms->is_nonexistent((*vector)[i]);} + void adv(); + FindIterator & operator ++() {adv(); return *this;} + }; + friend class FindIterator; + + public: + class ConstFindIterator : public FindIterator + { + public: + ConstFindIterator() {} + ConstFindIterator(const HashTable * ht, const key_type & k) + : FindIterator(ht,k) {} + const value_type & deref() const {return (*this->vector)[this->i];} + }; + + class MutableFindIterator : public FindIterator + { + public: + MutableFindIterator() {} + MutableFindIterator(HashTable * ht, const key_type & k) + : FindIterator(ht,k) {} + value_type & deref() const { + return (*const_cast<vector_type *>(this->vector))[this->i]; + } + }; + + ConstFindIterator multi_find(const key_type & k) const { + return ConstFindIterator(this, k); + } + + MutableFindIterator multi_find(const key_type & k) { + return MutableFindIterator(this, k); + } + + }; +} + +#endif diff --git a/jni/modules/speller/default/weights.hpp b/jni/modules/speller/default/weights.hpp new file mode 100644 index 0000000..a610a11 --- /dev/null +++ b/jni/modules/speller/default/weights.hpp @@ -0,0 +1,23 @@ + +#ifndef __aspeller_weights_hh__ +#define __aspeller_weights_hh__ + +namespace aspeller { + + struct EditDistanceWeights { + int del1; // the cost of deleting a char in the first string + int del2; // the cost of inserting a character or deleting a char + // in the next string + int swap; // the cost of swapping two adjacent letters + int sub; // the cost of replacing one letter with another + int similar; // the cost of a "similar" but not exact match for + // two characters + int min; // the min of del1, del2, swap and sub. + int max; // the max of del1, del2, swap and sub. + EditDistanceWeights() + : del1(1), del2(1), swap(1), sub(1), similar(0), min(1), max(1) {} + }; + +} + +#endif diff --git a/jni/modules/speller/default/wordinfo.hpp b/jni/modules/speller/default/wordinfo.hpp new file mode 100644 index 0000000..42f69d9 --- /dev/null +++ b/jni/modules/speller/default/wordinfo.hpp @@ -0,0 +1,60 @@ +// Copyright 2000 by Kevin Atkinson under the terms of the LGPL + +#ifndef __aspeller_wordinfo__ +#define __aspeller_wordinfo__ + +#include <assert.h> +#include "string.hpp" + +namespace acommon { + class OStream; + class Convert; +} + +namespace aspeller { + + // WordInfo + + typedef unsigned int WordInfo; // 4 bits + + enum CasePattern {Other, FirstUpper, AllLower, AllUpper}; + // Other 00 + // FirstUpper 01 + // AllLower 10 + // AllUpper 11 + // First bit : is upper + // Second bit: uniform case + + static const WordInfo CASE_PATTERN = 3; + static const WordInfo ALL_PLAIN = (1 << 2); + static const WordInfo ALL_CLEAN = (1 << 3); + + using namespace acommon; + + class Language; + struct ConvertWord; + + // WordEntry is an entry in the dictionary. + struct WordEntry + { + const char * word; + const char * aff; + const char * catg; + void (* adv_)(WordEntry *); + void * intr[3]; + unsigned word_size; + enum What {Other, Word, Soundslike, Clean, Misspelled} what; + WordInfo word_info; + int frequency; // 0 .. 255 + // if type is Word than aff will be defined, otherwise it won't + bool at_end() {return !word;} + bool adv() {if (adv_) {adv_(this); return true;} word = 0; return false;} + operator bool () const {return word != 0;} + OStream & write(OStream & o, const Language & l, Convert * c = 0) const; + WordEntry() {memset(this, 0, sizeof(WordEntry));} + void clear() {memset(this, 0, sizeof(WordEntry));} + ~WordEntry() {} + }; +} + +#endif diff --git a/jni/modules/speller/default/writable.cpp b/jni/modules/speller/default/writable.cpp new file mode 100644 index 0000000..3d43628 --- /dev/null +++ b/jni/modules/speller/default/writable.cpp @@ -0,0 +1,940 @@ +// This file is part of The New Aspell +// Copyright (C) 2000,2011 by Kevin Atkinson under the GNU LGPL +// license version 2.0 or 2.1. You should have received a copy of the +// LGPL license along with this library if you did not you can find it +// at http://www.gnu.org/. + +#include <time.h> + +#include "hash-t.hpp" +#include "data.hpp" +#include "data_util.hpp" +#include "enumeration.hpp" +#include "errors.hpp" +#include "file_util.hpp" +#include "fstream.hpp" +#include "language.hpp" +#include "getdata.hpp" + +namespace { + +////////////////////////////////////////////////////////////////////// +// +// WritableBase +// + +using namespace std; +using namespace aspeller; +using namespace acommon; + +typedef const char * Str; +typedef unsigned char byte; + +struct Hash { + InsensitiveHash f; + Hash(const Language * l) : f(l) {} + size_t operator() (Str s) const { + return f(s); + } +}; + +struct Equal { + InsensitiveEqual f; + Equal(const Language * l) : f(l) {} + bool operator() (Str a, Str b) const { + return f(a, b); + } +}; + +void write_n_escape(FStream & o, const char * str) { + while (*str != '\0') { + if (*str == '\n') o << "\\n"; + else if (*str == '\r') o << "\\r"; + else if (*str == '\\') o << "\\\\"; + else o << *str; + ++str; + } +} + +static inline char f_getc(FStream & in) { + int c = in.get(); + return c == EOF ? '\0' : (char)c; +} + +bool getline_n_unescape(FStream & in, String & str, char delem) { + str.clear(); + char c = f_getc(in); + if (!c) return false; + while (c && c != delem) { + if (c == '\\') { + c = f_getc(in); + if (c == 'n') str.append('\n'); + else if (c == 'r') str.append('\r'); + else if (c == '\\') str.append('\\'); + else {str.append('\\'); continue;} + } else { + str.append(c); + } + c = f_getc(in); + } + return true; +} + +bool getline_n_unescape(FStream & in, DataPair & d, String & buf) +{ + if (!getline_n_unescape(in, buf, '\n')) return false; + d.value.str = buf.mstr(); + d.value.size = buf.size(); + return true; +} + +typedef Vector<Str> StrVector; + +typedef hash_multiset<Str,Hash,Equal> WordLookup; +typedef hash_map<Str,StrVector> SoundslikeLookup; + +class WritableBase : public Dictionary { +protected: + String suffix; + String compatibility_suffix; + + time_t cur_file_date; + + String compatibility_file_name; + + WritableBase(BasicType t, const char * n, const char * s, const char * cs) + : Dictionary(t,n), + suffix(s), compatibility_suffix(cs), + use_soundslike(true) {fast_lookup = true;} + virtual ~WritableBase() {} + + virtual PosibErr<void> save(FStream &, ParmString) = 0; + virtual PosibErr<void> merge(FStream &, ParmString, Config * = 0) = 0; + + PosibErr<void> save2(FStream &, ParmString); + PosibErr<void> update(FStream &, ParmString); + PosibErr<void> save(bool do_update); + PosibErr<void> update_file_date_info(FStream &); + PosibErr<void> load(ParmString, Config &, DictList *, SpellerImpl *); + PosibErr<void> merge(ParmString); + PosibErr<void> save_as(ParmString); + PosibErr<void> clear(); + + String file_encoding; + ConvObj iconv; + ConvObj oconv; + PosibErr<void> set_file_encoding(ParmString, Config & c); + + PosibErr<void> synchronize() {return save(true);} + PosibErr<void> save_noupdate() {return save(false);} + + bool use_soundslike; + StackPtr<WordLookup> word_lookup; + SoundslikeLookup soundslike_lookup_; + ObjStack buffer; + + void set_lang_hook(Config & c) { + set_file_encoding(lang()->data_encoding(), c); + word_lookup.reset(new WordLookup(10, Hash(lang()), Equal(lang()))); + use_soundslike = lang()->have_soundslike(); + } +}; + +PosibErr<void> WritableBase::update_file_date_info(FStream & f) { + RET_ON_ERR(update_file_info(f)); + cur_file_date = get_modification_time(f); + return no_err; +} + +PosibErr<void> WritableBase::load(ParmString f0, Config & config, + DictList *, SpellerImpl *) +{ + set_file_name(f0); + const String f = file_name(); + FStream in; + + if (file_exists(f)) { + + RET_ON_ERR(open_file_readlock(in, f)); + if (in.peek() == EOF) return make_err(cant_read_file,f); + // ^^ FIXME + RET_ON_ERR(merge(in, f, &config)); + + } else if (f.substr(f.size()-suffix.size(),suffix.size()) + == suffix) { + + compatibility_file_name = f.substr(0,f.size() - suffix.size()); + compatibility_file_name += compatibility_suffix; + + { + PosibErr<void> pe = open_file_readlock(in, compatibility_file_name); + if (pe.has_err()) {compatibility_file_name = ""; return pe;} + } { + PosibErr<void> pe = merge(in, compatibility_file_name, &config); + if (pe.has_err()) {compatibility_file_name = ""; return pe;} + } + + } else { + + return make_err(cant_read_file,f); + + } + + return update_file_date_info(in); +} + +PosibErr<void> WritableBase::merge(ParmString f0) { + FStream in; + Dict::FileName fn(f0); + RET_ON_ERR(open_file_readlock(in, fn.path)); + RET_ON_ERR(merge(in, fn.path)); + return no_err; +} + +PosibErr<void> WritableBase::update(FStream & in, ParmString fn) { + typedef PosibErr<void> Ret; + { + Ret pe = merge(in, fn); + if (pe.has_err() && compatibility_file_name.empty()) return pe; + } { + Ret pe = update_file_date_info(in); + if (pe.has_err() && compatibility_file_name.empty()) return pe; + } + return no_err; +} + +PosibErr<void> WritableBase::save2(FStream & out, ParmString fn) { + truncate_file(out, fn); + + RET_ON_ERR(save(out,fn)); + + out.flush(); + + return no_err; +} + +PosibErr<void> WritableBase::save_as(ParmString fn) { + compatibility_file_name = ""; + set_file_name(fn); + FStream inout; + RET_ON_ERR(open_file_writelock(inout, file_name())); + RET_ON_ERR(save2(inout, file_name())); + RET_ON_ERR(update_file_date_info(inout)); + return no_err; +} + +PosibErr<void> WritableBase::save(bool do_update) { + FStream inout; + RET_ON_ERR_SET(open_file_writelock(inout, file_name()), + bool, prev_existed); + + if (do_update + && prev_existed + && get_modification_time(inout) > cur_file_date) + RET_ON_ERR(update(inout, file_name())); + + RET_ON_ERR(save2(inout, file_name())); + RET_ON_ERR(update_file_date_info(inout)); + + if (compatibility_file_name.size() != 0) { + remove_file(compatibility_file_name.c_str()); + compatibility_file_name = ""; + } + + return no_err; +} + +PosibErr<void> WritableBase::clear() { + word_lookup->clear(); + soundslike_lookup_.clear(); + buffer.reset(); + return no_err; +} + +PosibErr<void> WritableBase::set_file_encoding(ParmString enc, Config & c) +{ + if (enc == file_encoding) return no_err; + if (enc == "") enc = lang()->charmap(); + RET_ON_ERR(iconv.setup(c, enc, lang()->charmap(), NormFrom)); + RET_ON_ERR(oconv.setup(c, lang()->charmap(), enc, NormTo)); + if (iconv || oconv) + file_encoding = enc; + else + file_encoding = ""; + return no_err; +} + + +///////////////////////////////////////////////////////////////////// +// +// Common Stuff +// + +// a word is stored in memory as follows +// <word info><size><word...><null> +// the hash table points to the word and not the start of the block + +static inline void set_word(WordEntry & res, Str w) +{ + res.word = w; + res.word_size = (byte)w[-1]; + res.word_info = (byte)w[-2]; + res.aff = ""; +} + +// a soundslike is stored in memory as follows +// <word info><size><sl...><null> +// the hash table points to the sl and not the start of the block + +static inline void set_sl(WordEntry & res, Str w) +{ + res.word = w; + res.word_size = (byte)w[-1]; +} + +static void soundslike_next(WordEntry * w) +{ + const Str * & i = (const Str * &)(w->intr[0]); + const Str * end = (const Str * )(w->intr[1]); + set_word(*w, *i); + ++i; + if (i == end) w->adv_ = 0; +} + +static void sl_init(const StrVector * tmp, WordEntry & o) +{ + const Str * i = tmp->pbegin(); + const Str * end = tmp->pend(); + set_word(o, *i); + ++i; + if (i != end) { + o.intr[0] = (void *)i; + o.intr[1] = (void *)end; + o.adv_ = soundslike_next; + } else { + o.intr[0] = 0; + } +} + +struct SoundslikeElements : public SoundslikeEnumeration { + + typedef SoundslikeLookup::const_iterator Itr; + + Itr i; + Itr end; + + WordEntry d; + + SoundslikeElements(Itr i0, Itr end0) : i(i0), end(end0) { + d.what = WordEntry::Soundslike; + } + + WordEntry * next(int) { + if (i == end) return 0; + set_sl(d, i->first); + d.intr[0] = (void *)(&i->second); + ++i; + return &d; + } +}; + +struct CleanElements : public SoundslikeEnumeration { + + typedef WordLookup::const_iterator Itr; + + Itr i; + Itr end; + + WordEntry d; + + CleanElements(Itr i0, Itr end0) : i(i0), end(end0) { + d.what = WordEntry::Word; + } + + WordEntry * next(int) { + if (i == end) return 0; + set_word(d, *i); + ++i; + return &d; + } +}; + +struct ElementsParms { + typedef WordEntry * Value; + typedef WordLookup::const_iterator Iterator; + Iterator end_; + WordEntry data; + ElementsParms(Iterator e) : end_(e) {} + bool endf(Iterator i) const {return i==end_;} + Value deref(Iterator i) {set_word(data, *i); return &data;} + static Value end_state() {return 0;} +}; + +///////////////////////////////////////////////////////////////////// +// +// WritableDict +// + +class WritableDict : public WritableBase +{ +public: //but don't use + PosibErr<void> save(FStream &, ParmString); + PosibErr<void> merge(FStream &, ParmString, Config * config); + +public: + + WritableDict() : WritableBase(basic_dict, "WritableDict", ".pws", ".per") {} + + Size size() const; + bool empty() const; + + PosibErr<void> add(ParmString w) {return Dictionary::add(w);} + PosibErr<void> add(ParmString w, ParmString s); + + bool lookup(ParmString word, const SensitiveCompare *, WordEntry &) const; + + bool clean_lookup(const char * sondslike, WordEntry &) const; + + bool soundslike_lookup(const WordEntry & soundslike, WordEntry &) const; + bool soundslike_lookup(ParmString soundslike, WordEntry &) const; + + WordEntryEnumeration * detailed_elements() const; + + SoundslikeEnumeration * soundslike_elements() const; +}; + +WritableDict::Size WritableDict::size() const +{ + return word_lookup->size(); +} + +bool WritableDict::empty() const +{ + return word_lookup->empty(); +} + +bool WritableDict::lookup(ParmString word, const SensitiveCompare * c, + WordEntry & o) const +{ + o.clear(); + pair<WordLookup::iterator, WordLookup::iterator> p(word_lookup->equal_range(word)); + while (p.first != p.second) { + if ((*c)(word,*p.first)) { + o.what = WordEntry::Word; + set_word(o, *p.first); + return true; + } + ++p.first; + } + return false; +} + +bool WritableDict::clean_lookup(const char * sl, WordEntry & o) const +{ + o.clear(); + pair<WordLookup::iterator, WordLookup::iterator> p(word_lookup->equal_range(sl)); + if (p.first == p.second) return false; + o.what = WordEntry::Word; + set_word(o, *p.first); + return true; + // FIXME: Deal with multiple entries +} + +bool WritableDict::soundslike_lookup(const WordEntry & word, WordEntry & o) const +{ + if (use_soundslike) { + + const StrVector * tmp + = (const StrVector *)(word.intr[0]); + o.clear(); + + o.what = WordEntry::Word; + sl_init(tmp, o); + + } else { + + o.what = WordEntry::Word; + o.word = word.word; + o.word_size = word.word_size; + o.word_info = word.word_info; + o.aff = ""; + + } + return true; +} + +bool WritableDict::soundslike_lookup(ParmString word, WordEntry & o) const +{ + if (use_soundslike) { + + o.clear(); + SoundslikeLookup::const_iterator i = soundslike_lookup_.find(word); + if (i == soundslike_lookup_.end()) { + return false; + } else { + o.what = WordEntry::Word; + sl_init(&i->second, o); + return true; + } + + } else { + + return WritableDict::clean_lookup(word, o); + + } +} + +SoundslikeEnumeration * WritableDict::soundslike_elements() const { + if (use_soundslike) + return new SoundslikeElements(soundslike_lookup_.begin(), + soundslike_lookup_.end()); + else + return new CleanElements(word_lookup->begin(), + word_lookup->end()); +} + +WritableDict::Enum * WritableDict::detailed_elements() const { + return new MakeEnumeration<ElementsParms> + (word_lookup->begin(),ElementsParms(word_lookup->end())); +} + +PosibErr<void> WritableDict::add(ParmString w, ParmString s) { + RET_ON_ERR(check_if_valid(*lang(),w)); + SensitiveCompare c(lang()); + WordEntry we; + if (WritableDict::lookup(w,&c,we)) return no_err; + byte * w2; + w2 = (byte *)buffer.alloc(w.size() + 3); + *w2++ = lang()->get_word_info(w); + *w2++ = w.size(); + memcpy(w2, w.str(), w.size() + 1); + word_lookup->insert((char *)w2); + if (use_soundslike) { + byte * s2; + s2 = (byte *)buffer.alloc(s.size() + 2); + *s2++ = s.size(); + memcpy(s2, s.str(), s.size() + 1); + soundslike_lookup_[(char *)s2].push_back((char *)w2); + } + return no_err; +} + +PosibErr<void> WritableDict::merge(FStream & in, + ParmString file_name, + Config * config) +{ + typedef PosibErr<void> Ret; + unsigned int ver; + + String buf; + DataPair dp; + + if (!getline(in, dp, buf)) + make_err(bad_file_format, file_name); + + split(dp); + if (dp.key == "personal_wl") + ver = 10; + else if (dp.key == "personal_ws-1.1") + ver = 11; + else + return make_err(bad_file_format, file_name); + + split(dp); + { + Ret pe = set_check_lang(dp.key, *config); + if (pe.has_err()) + return pe.with_file(file_name); + } + + split(dp); // count not used at the moment + + split(dp); + if (dp.key.size > 0) + set_file_encoding(dp.key, *config); + else + set_file_encoding("", *config); + + ConvP conv(iconv); + while (getline_n_unescape(in, dp, buf)) { + if (ver == 10) + split(dp); + else + dp.key = dp.value; + Ret pe = add(conv(dp.key)); + if (pe.has_err()) { + clear(); + return pe.with_file(file_name); + } + } + return no_err; +} + +PosibErr<void> WritableDict::save(FStream & out, ParmString file_name) +{ + out.printf("personal_ws-1.1 %s %i %s\n", + lang_name(), word_lookup->size(), file_encoding.c_str()); + + WordLookup::const_iterator i = word_lookup->begin(); + WordLookup::const_iterator e = word_lookup->end(); + + ConvP conv(oconv); + for (;i != e; ++i) { + write_n_escape(out, conv(*i)); + out << '\n'; + } + return no_err; +} + +///////////////////////////////////////////////////////////////////// +// +// WritableReplList +// + +static inline StrVector * get_vector(Str s) +{ + return (StrVector *)(s - sizeof(StrVector) - 2); +} + +class WritableReplDict : public WritableBase +{ + WritableReplDict(const WritableReplDict&); + WritableReplDict& operator=(const WritableReplDict&); + +public: + WritableReplDict() : WritableBase(replacement_dict, "WritableReplDict", ".prepl",".rpl") + { + fast_lookup = true; + } + ~WritableReplDict(); + + Size size() const; + bool empty() const; + + bool lookup(ParmString, const SensitiveCompare *, WordEntry &) const; + + bool clean_lookup(ParmString sondslike, WordEntry &) const; + + bool soundslike_lookup(const WordEntry &, WordEntry &) const; + bool soundslike_lookup(ParmString, WordEntry &) const; + + bool repl_lookup(const WordEntry &, WordEntry &) const; + bool repl_lookup(ParmString, WordEntry &) const; + + WordEntryEnumeration * detailed_elements() const; + SoundslikeEnumeration * soundslike_elements() const; + + PosibErr<void> add_repl(ParmString mis, ParmString cor) { + return Dictionary::add_repl(mis,cor);} + PosibErr<void> add_repl(ParmString mis, ParmString cor, ParmString s); + +private: + PosibErr<void> save(FStream &, ParmString ); + PosibErr<void> merge(FStream &, ParmString , Config * config); +}; + +WritableReplDict::Size WritableReplDict::size() const +{ + return word_lookup->size(); +} + +bool WritableReplDict::empty() const +{ + return word_lookup->empty(); +} + +bool WritableReplDict::lookup(ParmString word, const SensitiveCompare * c, + WordEntry & o) const +{ + o.clear(); + pair<WordLookup::iterator, WordLookup::iterator> p(word_lookup->equal_range(word)); + while (p.first != p.second) { + if ((*c)(word,*p.first)) { + o.what = WordEntry::Misspelled; + set_word(o, *p.first); + o.intr[0] = (void *)*p.first; + return true; + } + ++p.first; + } + return false; +} + +bool WritableReplDict::clean_lookup(ParmString sl, WordEntry & o) const +{ + o.clear(); + pair<WordLookup::iterator, WordLookup::iterator> p(word_lookup->equal_range(sl)); + if (p.first == p.second) return false; + o.what = WordEntry::Misspelled; + set_word(o, *p.first); + o.intr[0] = (void *)*p.first; + return true; + // FIXME: Deal with multiple entries +} + +bool WritableReplDict::soundslike_lookup(const WordEntry & word, WordEntry & o) const +{ + if (use_soundslike) { + const StrVector * tmp = (const StrVector *)(word.intr[0]); + o.clear(); + o.what = WordEntry::Misspelled; + sl_init(tmp, o); + } else { + o.what = WordEntry::Misspelled; + o.word = word.word; + o.word_size = word.word_size; + o.aff = ""; + } + return true; +} + +bool WritableReplDict::soundslike_lookup(ParmString soundslike, WordEntry & o) const +{ + if (use_soundslike) { + o.clear(); + SoundslikeLookup::const_iterator i = soundslike_lookup_.find(soundslike); + if (i == soundslike_lookup_.end()) { + return false; + } else { + o.what = WordEntry::Misspelled; + sl_init(&(i->second), o); + return true; + } + } else { + return WritableReplDict::clean_lookup(soundslike, o); + } +} + +SoundslikeEnumeration * WritableReplDict::soundslike_elements() const { + if (use_soundslike) + return new SoundslikeElements(soundslike_lookup_.begin(), + soundslike_lookup_.end()); + else + return new CleanElements(word_lookup->begin(), + word_lookup->end()); +} + +WritableReplDict::Enum * WritableReplDict::detailed_elements() const { + return new MakeEnumeration<ElementsParms> + (word_lookup->begin(),ElementsParms(word_lookup->end())); +} + +static void repl_next(WordEntry * w) +{ + const Str * & i = (const Str * &)(w->intr[0]); + const Str * end = (const Str * )(w->intr[1]); + set_word(*w, *i); + ++i; + if (i == end) w->adv_ = 0; +} + +static void repl_init(const StrVector * tmp, WordEntry & o) +{ + o.what = WordEntry::Word; + const Str * i = tmp->pbegin(); + const Str * end = tmp->pend(); + set_word(o, *i); + ++i; + if (i != end) { + o.intr[0] = (void *)i; + o.intr[1] = (void *)end; + o.adv_ = repl_next; + } else { + o.intr[0] = 0; + } +} + +bool WritableReplDict::repl_lookup(const WordEntry & w, WordEntry & o) const +{ + const StrVector * repls; + if (w.intr[0] && !w.intr[1]) { // the intr are not for the sl iter + repls = get_vector(w.word); + } else { + SensitiveCompare c(lang()); // FIXME: This is not exactly right + WordEntry tmp; + WritableReplDict::lookup(w.word, &c, tmp); + repls = get_vector(tmp.word); + if (!repls) return false; + } + o.clear(); + repl_init(repls, o); + return true; +} + +bool WritableReplDict::repl_lookup(ParmString word, WordEntry & o) const +{ + WordEntry w; + w.word = word; + return WritableReplDict::repl_lookup(w, o); +} + +PosibErr<void> WritableReplDict::add_repl(ParmString mis, ParmString cor, ParmString sl) +{ + Str m; + SensitiveCompare cmp(lang()); // FIXME: I don't think this is completely correct + WordEntry we; + + pair<WordLookup::iterator, WordLookup::iterator> p0(word_lookup->equal_range(mis)); + WordLookup::iterator p = p0.first; + + for (; p != p0.second && !cmp(mis,*p); ++p); + + if (p == p0.second) { + byte * m0 = (byte *)buffer.alloc(sizeof(StrVector) + mis.size() + 3, sizeof(void *)); + new (m0) StrVector; + m0 += sizeof(StrVector); + *m0++ = lang()->get_word_info(mis); + *m0++ = mis.size(); + memcpy(m0, mis.str(), mis.size() + 1); + m = (char *)m0; + p = word_lookup->insert(m).first; + } else { + m = *p; + } + + StrVector * v = get_vector(m); + + for (StrVector::iterator i = v->begin(); i != v->end(); ++i) + if (cmp(cor, *i)) return no_err; + + byte * c0 = (byte *)buffer.alloc(cor.size() + 3); + *c0++ = lang()->get_word_info(cor); + *c0++ = cor.size(); + memcpy(c0, cor.str(), cor.size() + 1); + v->push_back((char *)c0); + + if (use_soundslike) { + byte * s0 = (byte *)buffer.alloc(sl.size() + 2); + *s0++ = sl.size(); + memcpy(s0, sl.str(), sl.size() + 1); + soundslike_lookup_[(char *)s0].push_back(m); + } + + return no_err; +} + +PosibErr<void> WritableReplDict::save (FStream & out, ParmString file_name) +{ + out.printf("personal_repl-1.1 %s 0 %s\n", lang_name(), file_encoding.c_str()); + + WordLookup::iterator i = word_lookup->begin(); + WordLookup::iterator e = word_lookup->end(); + + ConvP conv1(oconv); + ConvP conv2(oconv); + + for (;i != e; ++i) + { + StrVector * v = get_vector(*i); + for (StrVector::iterator j = v->begin(); j != v->end(); ++j) + { + write_n_escape(out, conv1(*i)); + out << ' '; + write_n_escape(out, conv2(*j)); + out << '\n'; + } + } + return no_err; +} + +PosibErr<void> WritableReplDict::merge(FStream & in, + ParmString file_name, + Config * config) +{ + typedef PosibErr<void> Ret; + unsigned int version; + unsigned int num_words, num_repls; + + String buf; + DataPair dp; + + if (!getline(in, dp, buf)) + make_err(bad_file_format, file_name); + + split(dp); + if (dp.key == "personal_repl") + version = 10; + else if (dp.key == "personal_repl-1.1") + version = 11; + else + return make_err(bad_file_format, file_name); + + split(dp); + { + Ret pe = set_check_lang(dp.key, *config); + if (pe.has_err()) + return pe.with_file(file_name); + } + + unsigned int num_soundslikes = 0; + if (version == 10) { + split(dp); + num_soundslikes = atoi(dp.key); + } + + split(dp); // not used at the moment + + split(dp); + if (dp.key.size > 0) + set_file_encoding(dp.key, *config); + else + set_file_encoding("", *config); + + if (version == 11) { + + ConvP conv1(iconv); + ConvP conv2(iconv); + for (;;) { + bool res = getline_n_unescape(in, buf, '\n'); + if (!res) break; + char * mis = buf.mstr(); + char * repl = strchr(mis, ' '); + if (!repl) continue; // bad line, ignore + *repl = '\0'; // split string + ++repl; + if (!repl[0]) continue; // empty repl, ignore + WritableReplDict::add_repl(conv1(mis), conv2(repl)); + } + + } else { + + String mis, sound, repl; + unsigned int h,i,j; + for (h=0; h != num_soundslikes; ++h) { + in >> sound >> num_words; + for (i = 0; i != num_words; ++i) { + in >> mis >> num_repls; + in.ignore(); // ignore space + for (j = 0; j != num_repls; ++j) { + in.getline(repl, ','); + WritableReplDict::add_repl(mis, repl); + } + } + } + + } + return no_err; +} + +WritableReplDict::~WritableReplDict() +{ + WordLookup::iterator i = word_lookup->begin(); + WordLookup::iterator e = word_lookup->end(); + + for (;i != e; ++i) + get_vector(*i)->~StrVector(); +} + +} + +namespace aspeller { + + Dictionary * new_default_writable_dict() { + return new WritableDict(); + } + + Dictionary * new_default_replacement_dict() { + return new WritableReplDict(); + } + +} diff --git a/jni/modules/speller/default/writable.lo b/jni/modules/speller/default/writable.lo new file mode 100644 index 0000000..525f875 --- /dev/null +++ b/jni/modules/speller/default/writable.lo @@ -0,0 +1,12 @@ +# modules/speller/default/writable.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/writable.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/modules/tokenizer/.deps/.dirstamp b/jni/modules/tokenizer/.deps/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/modules/tokenizer/.deps/basic.Plo b/jni/modules/tokenizer/.deps/basic.Plo new file mode 100644 index 0000000..ee35398 --- /dev/null +++ b/jni/modules/tokenizer/.deps/basic.Plo @@ -0,0 +1,286 @@ +modules/tokenizer/basic.lo: modules/tokenizer/basic.cpp \ + common/tokenizer.hpp common/char_vector.hpp common/string.hpp \ + /usr/include/string.h /usr/include/features.h \ + /usr/include/bits/predefs.h /usr/include/sys/cdefs.h \ + /usr/include/bits/wordsize.h /usr/include/gnu/stubs.h \ + /usr/include/gnu/stubs-64.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h \ + /usr/include/xlocale.h /usr/include/bits/string3.h /usr/include/stdlib.h \ + /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h \ + /usr/include/endian.h /usr/include/bits/endian.h \ + /usr/include/bits/byteswap.h /usr/include/sys/types.h \ + /usr/include/bits/types.h /usr/include/bits/typesizes.h \ + /usr/include/time.h /usr/include/sys/select.h /usr/include/bits/select.h \ + /usr/include/bits/sigset.h /usr/include/bits/time.h \ + /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h \ + /usr/include/alloca.h /usr/include/bits/stdlib.h \ + /usr/include/c++/4.5/algorithm /usr/include/c++/4.5/utility \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h \ + /usr/include/c++/4.5/bits/stl_relops.h \ + /usr/include/c++/4.5/bits/stl_pair.h /usr/include/c++/4.5/bits/move.h \ + /usr/include/c++/4.5/cstddef /usr/include/c++/4.5/bits/concept_check.h \ + /usr/include/c++/4.5/bits/stl_algobase.h \ + /usr/include/c++/4.5/bits/functexcept.h \ + /usr/include/c++/4.5/exception_defines.h \ + /usr/include/c++/4.5/bits/cpp_type_traits.h \ + /usr/include/c++/4.5/ext/type_traits.h \ + /usr/include/c++/4.5/ext/numeric_traits.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_types.h \ + /usr/include/c++/4.5/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/4.5/bits/stl_iterator.h \ + /usr/include/c++/4.5/debug/debug.h /usr/include/c++/4.5/bits/stl_algo.h \ + /usr/include/c++/4.5/cstdlib /usr/include/c++/4.5/bits/algorithmfwd.h \ + /usr/include/c++/4.5/initializer_list \ + /usr/include/c++/4.5/bits/stl_heap.h \ + /usr/include/c++/4.5/bits/stl_tempbuf.h \ + /usr/include/c++/4.5/bits/stl_construct.h /usr/include/c++/4.5/new \ + /usr/include/c++/4.5/exception \ + /usr/include/c++/4.5/bits/stl_uninitialized.h common/hash_fun.hpp \ + common/parm_string.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h \ + /usr/include/limits.h /usr/include/bits/posix1_lim.h \ + /usr/include/bits/local_lim.h /usr/include/linux/limits.h \ + /usr/include/bits/posix2_lim.h /usr/include/bits/xopen_lim.h \ + /usr/include/bits/stdio_lim.h common/mutable_string.hpp \ + common/ostream.hpp \ + /usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h \ + common/istream.hpp common/filter_char.hpp common/filter_char_vector.hpp \ + common/vector.hpp /usr/include/c++/4.5/vector \ + /usr/include/c++/4.5/bits/allocator.h \ + /usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h \ + /usr/include/c++/4.5/ext/new_allocator.h \ + /usr/include/c++/4.5/bits/stl_vector.h \ + /usr/include/c++/4.5/bits/stl_bvector.h \ + /usr/include/c++/4.5/bits/vector.tcc common/convert.hpp \ + common/posib_err.hpp common/error.hpp common/errors.hpp \ + common/ndebug.hpp common/stack_ptr.hpp /usr/include/assert.h \ + common/filter.hpp common/can_have_error.hpp common/copy_ptr.hpp \ + common/generic_copy_ptr-t.hpp common/generic_copy_ptr.hpp \ + common/string_pair_enumeration.hpp common/string_pair.hpp \ + /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \ + /usr/include/wchar.h /usr/include/bits/sys_errlist.h \ + /usr/include/bits/stdio.h /usr/include/bits/stdio2.h common/cache.hpp \ + common/speller.hpp common/clone_ptr.hpp + +common/tokenizer.hpp: + +common/char_vector.hpp: + +common/string.hpp: + +/usr/include/string.h: + +/usr/include/features.h: + +/usr/include/bits/predefs.h: + +/usr/include/sys/cdefs.h: + +/usr/include/bits/wordsize.h: + +/usr/include/gnu/stubs.h: + +/usr/include/gnu/stubs-64.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stddef.h: + +/usr/include/xlocale.h: + +/usr/include/bits/string3.h: + +/usr/include/stdlib.h: + +/usr/include/bits/waitflags.h: + +/usr/include/bits/waitstatus.h: + +/usr/include/endian.h: + +/usr/include/bits/endian.h: + +/usr/include/bits/byteswap.h: + +/usr/include/sys/types.h: + +/usr/include/bits/types.h: + +/usr/include/bits/typesizes.h: + +/usr/include/time.h: + +/usr/include/sys/select.h: + +/usr/include/bits/select.h: + +/usr/include/bits/sigset.h: + +/usr/include/bits/time.h: + +/usr/include/sys/sysmacros.h: + +/usr/include/bits/pthreadtypes.h: + +/usr/include/alloca.h: + +/usr/include/bits/stdlib.h: + +/usr/include/c++/4.5/algorithm: + +/usr/include/c++/4.5/utility: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++config.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/os_defines.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/cpu_defines.h: + +/usr/include/c++/4.5/bits/stl_relops.h: + +/usr/include/c++/4.5/bits/stl_pair.h: + +/usr/include/c++/4.5/bits/move.h: + +/usr/include/c++/4.5/cstddef: + +/usr/include/c++/4.5/bits/concept_check.h: + +/usr/include/c++/4.5/bits/stl_algobase.h: + +/usr/include/c++/4.5/bits/functexcept.h: + +/usr/include/c++/4.5/exception_defines.h: + +/usr/include/c++/4.5/bits/cpp_type_traits.h: + +/usr/include/c++/4.5/ext/type_traits.h: + +/usr/include/c++/4.5/ext/numeric_traits.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_types.h: + +/usr/include/c++/4.5/bits/stl_iterator_base_funcs.h: + +/usr/include/c++/4.5/bits/stl_iterator.h: + +/usr/include/c++/4.5/debug/debug.h: + +/usr/include/c++/4.5/bits/stl_algo.h: + +/usr/include/c++/4.5/cstdlib: + +/usr/include/c++/4.5/bits/algorithmfwd.h: + +/usr/include/c++/4.5/initializer_list: + +/usr/include/c++/4.5/bits/stl_heap.h: + +/usr/include/c++/4.5/bits/stl_tempbuf.h: + +/usr/include/c++/4.5/bits/stl_construct.h: + +/usr/include/c++/4.5/new: + +/usr/include/c++/4.5/exception: + +/usr/include/c++/4.5/bits/stl_uninitialized.h: + +common/hash_fun.hpp: + +common/parm_string.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/limits.h: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include-fixed/syslimits.h: + +/usr/include/limits.h: + +/usr/include/bits/posix1_lim.h: + +/usr/include/bits/local_lim.h: + +/usr/include/linux/limits.h: + +/usr/include/bits/posix2_lim.h: + +/usr/include/bits/xopen_lim.h: + +/usr/include/bits/stdio_lim.h: + +common/mutable_string.hpp: + +common/ostream.hpp: + +/usr/lib/x86_64-linux-gnu/gcc/x86_64-linux-gnu/4.5.2/include/stdarg.h: + +common/istream.hpp: + +common/filter_char.hpp: + +common/filter_char_vector.hpp: + +common/vector.hpp: + +/usr/include/c++/4.5/vector: + +/usr/include/c++/4.5/bits/allocator.h: + +/usr/include/c++/4.5/x86_64-linux-gnu/bits/c++allocator.h: + +/usr/include/c++/4.5/ext/new_allocator.h: + +/usr/include/c++/4.5/bits/stl_vector.h: + +/usr/include/c++/4.5/bits/stl_bvector.h: + +/usr/include/c++/4.5/bits/vector.tcc: + +common/convert.hpp: + +common/posib_err.hpp: + +common/error.hpp: + +common/errors.hpp: + +common/ndebug.hpp: + +common/stack_ptr.hpp: + +/usr/include/assert.h: + +common/filter.hpp: + +common/can_have_error.hpp: + +common/copy_ptr.hpp: + +common/generic_copy_ptr-t.hpp: + +common/generic_copy_ptr.hpp: + +common/string_pair_enumeration.hpp: + +common/string_pair.hpp: + +/usr/include/stdio.h: + +/usr/include/libio.h: + +/usr/include/_G_config.h: + +/usr/include/wchar.h: + +/usr/include/bits/sys_errlist.h: + +/usr/include/bits/stdio.h: + +/usr/include/bits/stdio2.h: + +common/cache.hpp: + +common/speller.hpp: + +common/clone_ptr.hpp: diff --git a/jni/modules/tokenizer/.dirstamp b/jni/modules/tokenizer/.dirstamp new file mode 100644 index 0000000..e69de29 diff --git a/jni/modules/tokenizer/Makefile b/jni/modules/tokenizer/Makefile new file mode 100644 index 0000000..aac96cc --- /dev/null +++ b/jni/modules/tokenizer/Makefile @@ -0,0 +1,4 @@ +top_srcdir = ../.. + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/tokenizer/Makefile.in b/jni/modules/tokenizer/Makefile.in new file mode 100644 index 0000000..60bc80d --- /dev/null +++ b/jni/modules/tokenizer/Makefile.in @@ -0,0 +1,4 @@ +top_srcdir = @top_srcdir@ + +subsystem: + $(MAKE) -C ${top_srcdir} diff --git a/jni/modules/tokenizer/basic.cpp b/jni/modules/tokenizer/basic.cpp new file mode 100644 index 0000000..89ea078 --- /dev/null +++ b/jni/modules/tokenizer/basic.cpp @@ -0,0 +1,80 @@ + +// This file is part of The New Aspell +// Copyright (C) 2001 by Kevin Atkinson under the GNU LGPL license +// version 2.0 or 2.1. You should have received a copy of the LGPL +// license along with this library if you did not you can find +// it at http://www.gnu.org/. + +#include "tokenizer.hpp" +#include "convert.hpp" +#include "speller.hpp" + + +namespace acommon { + + class TokenizerBasic : public Tokenizer + { + public: + bool advance(); + }; + + bool TokenizerBasic::advance() { + word_begin = word_end; + begin_pos = end_pos; + FilterChar * cur = word_begin; + unsigned int cur_pos = begin_pos; + word.clear(); + + // skip spaces (non-word characters) + while (*cur != 0 && + !(is_word(*cur) + || (is_begin(*cur) && is_word(cur[1])))) + { + cur_pos += cur->width; + ++cur; + } + + if (*cur == 0) return false; + + word_begin = cur; + begin_pos = cur_pos; + + if (is_begin(*cur) && is_word(cur[1])) + { + cur_pos += cur->width; + ++cur; + } + + while (is_word(*cur) || + (is_middle(*cur) && + cur > word_begin && is_word(cur[-1]) && + is_word(cur[1]) )) + { + word.append(*cur); + cur_pos += cur->width; + ++cur; + } + + if (is_end(*cur)) + { + word.append(*cur); + cur_pos += cur->width; + ++cur; + } + + word.append('\0'); + word_end = cur; + end_pos = cur_pos; + + return true; + } +#undef increment__ + + PosibErr<Tokenizer *> new_tokenizer(Speller * speller) + { + Tokenizer * tok = new TokenizerBasic(); + speller->setup_tokenizer(tok); + return tok; + } + +} diff --git a/jni/modules/tokenizer/basic.lo b/jni/modules/tokenizer/basic.lo new file mode 100644 index 0000000..0a121ba --- /dev/null +++ b/jni/modules/tokenizer/basic.lo @@ -0,0 +1,12 @@ +# modules/tokenizer/basic.lo - a libtool object file +# Generated by ltmain.sh (GNU libtool) 2.2.2 +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# Name of the PIC object. +pic_object='.libs/basic.o' + +# Name of the non-PIC object +non_pic_object=none + diff --git a/jni/native.cpp b/jni/native.cpp new file mode 100644 index 0000000..23dd7e5 --- /dev/null +++ b/jni/native.cpp @@ -0,0 +1,193 @@ +#include <jni.h> +#include <string.h> +#include <android/log.h> +#include "aspell.h" + +#include <stdio.h> + +#define DEBUG_TAG "NDK_ASpell" + +extern "C" +{ + +void log_word_list(AspellSpeller * speller, const AspellWordList *wl) +{ + if (wl == 0) + { + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:LC: Failed to get suggested world list [%s]", + aspell_speller_error_message(speller)); + } + else + { + AspellStringEnumeration * els = aspell_word_list_elements(wl); + const char * word; + while ((word = aspell_string_enumeration_next(els)) != 0) + { + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:LC: Suggested: [%s]", word); + } + delete_aspell_string_enumeration(els); + } +} + +void Java_gr_padeler_aspellchecker_ASpell_destruct(JNIEnv * env, jobject _this) +{ + jclass cls = env->GetObjectClass(_this); + jfieldID fid = env->GetFieldID(cls, "nativePtr", "J"); + AspellSpeller *speller = (AspellSpeller *) env->GetLongField(_this, fid); + delete_aspell_speller(speller); + env->SetLongField(_this, fid, 0); +} + +void Java_gr_padeler_aspellchecker_ASpell_setUserDictionary(JNIEnv * env, jobject _this, jobjectArray strings) +{ + jclass cls = env->GetObjectClass(_this); + jfieldID fid = env->GetFieldID(cls, "nativePtr", "J"); + AspellSpeller *speller = (AspellSpeller *) env->GetLongField(_this, fid); + + if (speller == NULL) + { + env->ThrowNew(env->FindClass("java/lang/Exception"), "Speller Not initialized"); + return; + } + + aspell_speller_clear_session(speller); + + jboolean isCopy; + int numWords = env->GetArrayLength(strings); + for (int i = 0; i < numWords; i++) + { + jstring jword = (jstring) env->GetObjectArrayElement(strings, i); + const char * word = env->GetStringUTFChars(jword, &isCopy); + int stringLength = env->GetStringUTFLength(jword); + aspell_speller_add_to_session(speller, word, stringLength); + env->ReleaseStringUTFChars(jword, word); + } + + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:ASpell User dictionary updated"); +} + +jboolean Java_gr_padeler_aspellchecker_ASpell_initialize(JNIEnv * env, + jobject _this, + jstring dataDirStr, + jstring localeStr) +{ + jclass cls = env->GetObjectClass(_this); + jfieldID fid = env->GetFieldID(cls, "nativePtr", "J"); + + if (env->GetLongField(_this, fid) != 0) + { + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:ASpell Already initialized!"); + return JNI_FALSE; + } + + AspellSpeller *speller = NULL; + AspellConfig * config = NULL; + AspellCanHaveError * ret; + + config = new_aspell_config(); + + jboolean isCopy; + const char * locale = env->GetStringUTFChars(localeStr, &isCopy); + const char * dataDir = env->GetStringUTFChars(dataDirStr, &isCopy); + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:ASpell Creating Speller [%s] [%s]", locale, + dataDir); + + aspell_config_replace(config, "lang", locale); + aspell_config_replace(config, "data-dir", dataDir); + aspell_config_replace(config, "dict-dir", dataDir); + aspell_config_replace(config, "rem-filter", "url"); + aspell_config_replace(config, "encoding", "UTF-8"); + + ret = new_aspell_speller(config); + delete_aspell_config(config); + + env->ReleaseStringUTFChars(localeStr, locale); + env->ReleaseStringUTFChars(dataDirStr, dataDir); + + if (aspell_error(ret) != 0) + { + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:ASpell Failed to create speller [%s]", + aspell_error_message(ret)); + delete_aspell_can_have_error(ret); + return JNI_FALSE; + } + + speller = to_aspell_speller(ret); + config = aspell_speller_config(speller); + + env->SetLongField(_this, fid, (jlong) speller); + + return JNI_TRUE; +} + +jobjectArray Java_gr_padeler_aspellchecker_ASpell_check(JNIEnv * env, + jobject _this, + jstring wordStr) +{ + jobjectArray res; + + jclass cls = env->GetObjectClass(_this); + jfieldID fid = env->GetFieldID(cls, "nativePtr", "J"); + AspellSpeller *speller = (AspellSpeller *) env->GetLongField(_this, fid); + + if (speller == NULL) + { + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:ASpell Speller Not initialized."); + res = (jobjectArray) env->NewObjectArray( + 1, env->FindClass("java/lang/String"), env->NewStringUTF("")); + + env->SetObjectArrayElement(res, 0, env->NewStringUTF("-100")); + return res; + } + + jboolean isCopy; + const char * word = env->GetStringUTFChars(wordStr, &isCopy); + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:ASpell Checking word [%s]", word); + + int have = aspell_speller_check(speller, word, -1); + char code[5]; + sprintf(code, "%d", have); + + if (have != 0 && have != 1) + { // error. Keep the code in the result and log the event. + __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, + "NDK:ASpell Error %s\n", + aspell_speller_error_message(speller)); + res = (jobjectArray) env->NewObjectArray( + 1, env->FindClass("java/lang/String"), env->NewStringUTF("")); + env->SetObjectArrayElement(res, 0, env->NewStringUTF(code)); + } + else + { // i have results, store them to the result array. + const AspellWordList *wl = aspell_speller_suggest(speller, word, -1); + int len = aspell_word_list_size(wl) + 1; + res = (jobjectArray) env->NewObjectArray( + len, env->FindClass("java/lang/String"), env->NewStringUTF("")); + + AspellStringEnumeration * els = aspell_word_list_elements(wl); + + // store res code to first element of the list. + env->SetObjectArrayElement(res, 0, env->NewStringUTF(code)); + + const char * suggestion; + int i; + for (i = 1; i < len; ++i) + { + suggestion = aspell_string_enumeration_next(els); + env->SetObjectArrayElement(res, i, env->NewStringUTF(suggestion)); + } + delete_aspell_string_enumeration(els); + } + env->ReleaseStringUTFChars(wordStr, word); + return res; +} + +} diff --git a/jni/settings.h b/jni/settings.h new file mode 100644 index 0000000..2d147d0 --- /dev/null +++ b/jni/settings.h @@ -0,0 +1,162 @@ +/* gen/settings.h. Generated from settings.h.in by configure. */ +/* gen/settings.h.in. Generated from configure.ac by autoheader. */ + +#ifndef ASPELL_SETTINGS__H +#define ASPELL_SETTINGS__H + +/* Defined if filters should be compiled in */ +/* #undef COMPILE_IN_FILTER */ + +/* Defined to curses header file */ +/* #undef CURSES_HEADER */ + +/* Defined if no special Workarounds are needed for Curses headers */ +/* #undef CURSES_INCLUDE_STANDARD */ + +/* Defined if special Wordaround I is need for Curses headers */ +/* #undef CURSES_INCLUDE_WORKAROUND_1 */ + +/* Defined if curses like POSIX Functions should be used */ +/* #undef CURSES_ONLY */ + +/* Defined if _XOPEN_SOURCE_EXTENDED needs to be defined. (Can't define + globally as that will cause problems with some systems) */ +/* #undef DEFINE_XOPEN_SOURCE_EXTENDED */ + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +//#define ENABLE_NLS 1 + +/* Defined if win32 relocation should be used */ +/* #undef ENABLE_WIN32_RELOCATABLE */ + +/* Defined if filter version control should be used */ +#define FILTER_VERSION_CONTROL 1 + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYCURRENT */ + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#define HAVE_DCGETTEXT 1 + +/* Define to 1 if you have the <dlfcn.h> header file. */ +#define HAVE_DLFCN_H 1 + +/* Defined if msdos getch is supported */ +/* #undef HAVE_GETCH */ + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#define HAVE_GETTEXT 1 + +/* Define if you have the iconv() function. */ +/* #undef HAVE_ICONV */ + +/* Define to 1 if you have the <inttypes.h> header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ +//#define HAVE_LANGINFO_CODESET 1 + +/* Defined if the curses library is available */ +/* #undef HAVE_LIBCURSES */ + +/* Define to 1 if you have the `dl' library (-ldl). */ +#define HAVE_LIBDL 1 + +/* Defined if mblen is supported */ +#define HAVE_MBLEN 1 + +/* Define to 1 if you have the <memory.h> header file. */ +#define HAVE_MEMORY_H 1 + +/* Defined if mmap and friends is supported */ +#define HAVE_MMAP 1 + +/* Define to 1 if you have the <stdint.h> header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the <strings.h> header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if you have the <sys/stat.h> header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the <sys/types.h> header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Defined if curses libraray includes wide character support */ +/* #undef HAVE_WIDE_CURSES */ + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#define LT_OBJDIR ".libs/" + +/* Define to 1 if your C compiler doesn't accept -c and -o together. */ +/* #undef NO_MINUS_C_MINUS_O */ + +/* Name of package */ +#define PACKAGE "aspell" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "GNU Aspell" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "GNU Aspell 0.60.6.1" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "aspell" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "0.60.6.1" + +/* Defined if Posix Termios is Supported */ +#define POSIX_TERMIOS 1 + +/* Defined if STL rel_ops pollute the global namespace */ +/* #undef REL_OPS_POLLUTION */ + +/* Define to 1 if you have the ANSI C header files. */ +#define STDC_HEADERS 1 + +/* Defined to term header file */ +/* #undef TERM_HEADER */ + +/* Defined if file ino is supported */ +#define USE_FILE_INO 1 + +/* Defined if file locking and truncating is supported */ +#define USE_FILE_LOCKS 1 + +/* Defined if Posix locales are supported */ +#define USE_LOCALE 1 + +/* Defined if Posix mutexes are supported */ +#define USE_POSIX_MUTEX 1 + +/* Defined if Posix regex are supported */ +#define USE_POSIX_REGEX 1 + +/* Version number of package */ +#define VERSION "0.60.6.1" + +#define C_EXPORT extern "C" + +#endif /* ASPELL_SETTINGS__H */ diff --git a/proguard.cfg b/proguard.cfg new file mode 100644 index 0000000..b1cdf17 --- /dev/null +++ b/proguard.cfg @@ -0,0 +1,40 @@ +-optimizationpasses 5 +-dontusemixedcaseclassnames +-dontskipnonpubliclibraryclasses +-dontpreverify +-verbose +-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* + +-keep public class * extends android.app.Activity +-keep public class * extends android.app.Application +-keep public class * extends android.app.Service +-keep public class * extends android.content.BroadcastReceiver +-keep public class * extends android.content.ContentProvider +-keep public class * extends android.app.backup.BackupAgentHelper +-keep public class * extends android.preference.Preference +-keep public class com.android.vending.licensing.ILicensingService + +-keepclasseswithmembernames class * { + native <methods>; +} + +-keepclasseswithmembers class * { + public <init>(android.content.Context, android.util.AttributeSet); +} + +-keepclasseswithmembers class * { + public <init>(android.content.Context, android.util.AttributeSet, int); +} + +-keepclassmembers class * extends android.app.Activity { + public void *(android.view.View); +} + +-keepclassmembers enum * { + public static **[] values(); + public static ** valueOf(java.lang.String); +} + +-keep class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} diff --git a/project.properties b/project.properties new file mode 100644 index 0000000..895c9ce --- /dev/null +++ b/project.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "ant.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-16 diff --git a/readme.rst b/readme.rst new file mode 100644 index 0000000..578a1e0 --- /dev/null +++ b/readme.rst @@ -0,0 +1 @@ +Forked from http://code.google.com/p/aspellchecker/ diff --git a/res/drawable-hdpi/ic_launcher.png b/res/drawable-hdpi/ic_launcher.png new file mode 100644 index 0000000..8074c4c Binary files /dev/null and b/res/drawable-hdpi/ic_launcher.png differ diff --git a/res/drawable-ldpi/ic_launcher.png b/res/drawable-ldpi/ic_launcher.png new file mode 100644 index 0000000..1095584 Binary files /dev/null and b/res/drawable-ldpi/ic_launcher.png differ diff --git a/res/drawable-mdpi/ic_launcher.png b/res/drawable-mdpi/ic_launcher.png new file mode 100644 index 0000000..a07c69f Binary files /dev/null and b/res/drawable-mdpi/ic_launcher.png differ diff --git a/res/values/dictionaries.xml b/res/values/dictionaries.xml new file mode 100644 index 0000000..43da3aa --- /dev/null +++ b/res/values/dictionaries.xml @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android"> + + <string-array name="updateInterval"> + <item name="1000">Every 1 second</item> + <item name="5000">Every 5 seconds</item> + <item name="30000">Every 30 seconds</item> + <item name="60000">Every 1 minute</item> + <item name="300000">Every 5 minutes</item> + </string-array> + <string-array name="updateIntervalValues"> + <item name="1000">1000</item> + <item name="5000">5000</item> + <item name="30000">30000</item> + <item name="60000">60000</item> + <item name="300000">300000</item> + </string-array> + <string-array name="dicts"> + <!--<item name="af">Afrikaans</item> + <item name="am">Amharic አማርኛ</item> + <item name="ar">Arabic عربي</item> + <item name="ast">Asturian Asturianu </item> + <item name="az">Azerbaijani Azərbaycanca</item> + <item name="be">Belarusian Беларускі</item> + <item name="bg">Bulgarian Български</item> + <item name="bn">Bengali বাংলা</item> + <item name="br">Breton</item> + <item name="ca">Catalan</item> + <item name="cs">Czech Čeština</item> + <item name="csb">Kashubian Kaszëbsczi</item> + <item name="cy">Welsh</item> + <item name="da">Danish Dansk</item> + <item name="de">German</item> + <item name="el">Greek</item> + <item name="en">English</item> + <item name="eo">Esperanto</item> + <item name="es">Spanish Español</item> + <item name="et">Estonian</item>--> + <item name="sv">Swedish</item> + </string-array> + + + + +<string-array name="dictsVals"> + <!--<item name="af">af</item> + <item name="am">am</item> + <item name="ar">ar</item> + <item name="ast">as</item> + <item name="az">az</item> + <item name="be">be</item> + <item name="bg">bg</item> + <item name="bn">bn</item> + <item name="br">br</item> + <item name="ca">ca</item> + <item name="cs">cs</item> + <item name="csb">cs</item> + <item name="cy">cy</item> + <item name="da">da</item> + <item name="de">de</item> + <item name="el">el</item> + <item name="en">en</item> + <item name="eo">eo</item> + <item name="es">es</item> + <item name="et">et</item> --> + <item name="sv">sv</item> + </string-array> + + <!-- +fa Persian فارسی +fi Finnish +fo Faroese Føroyskt +fr French Fran +fy Frisian Frysk +ga Irish Gaeilge +gd Scottish Gaelic Gàidhlig +gl Galician Galego (minimos) +grc Ancient Greek +gu Gujarati ગુજરાતી +gv Manx Gaelic +he Hebrew עברית +hi Hindi हिंदी +hil Hiligaynon +hr Croatian + +hu Hungarian +hy Armenian Հայերեն +ia Interlingua +id Indonesian +is Icelandic +it Italian +kn Kannada ಕನ್ನಡ +ku Kurdi Kurdî +ky Kirghiz +la Latin +lt Lithuanian lietuvių +lv Latvian +mg Malagasy +mi Maori +mk Macedonian +ml Malayalam മലയാളം +mn Mongolian Монгол +mr Marathi मराठी +ms Malay +mt Maltese +nb Norwegian Bokmal +nds Low Saxon Plattdüütsch +nl Dutch +nn Norwegian Nynorsk +ny Chichewa +or Oriya ଓଡ଼ିଆ +pa Punjabi ਪੰਜਾਬੀ +pl Polish polski +pt_BR Brazilian Portuguese +pt_PT Portuguese português +qu Quechua Runasimi (qheshwa) +ro Romanian Română +ru Russian Русский +rw Kinyarwanda +sc Sardinian +sk Slovak Slovenský +sl Slovenian +sr Serbian Српски +sv Swedish +sw Swahili Kiswahili +ta Tamil தமிழ் +te Telugu తెలుగు +tet Tetum +tk Turkmen +tl Tagalog Tagalog +tn Setswana +tr Turkish +uk Ukrainian Українська +uz Uzbek Ўзбекча +vi Vietnamese Việt ngữ +wa Walloon walon +yi Yiddish ייִדיש +zu Zulu +af Afrikaans +be Belarusian Беларускі +bg Bulgarian +br Breton +ca Catalan +cs Czech +cy Welsh +da Danish Dansk +de German +el Greek +en English +eo Esperanto +es Spanish Espa +fo Faroese Føroyskt +fr French Fran +ga Irish Gaeilge +gd Scottish Gaelic Gàidhlig +gl Galician Galego +gv Manx Gaelic +hil Hiligaynon +hr Croatian +ia Interlingua +id Indonesian Bahasa Indonesia +is Icelandic +it Italian +ku Kurdi Kurdî +mg Malagasy +mi Maori +mk Macedonian +ms Malay +mt Maltese +nb Norwegian Bokmal +nl Dutch +nn Norwegian Nynorsk +ny Chichewa +pl Polish polski +pt Portuguese +ro Romanian Română +ru Russian +rw Kinyarwanda +sc Sardinian +sk Slovak +sl Slovenian +sv Swedish +sw Swahili Kiswahili +tet Tetum +tk Turkmen +tl Tagalog Tagalog +tn Setswana +tr Turkish +uk Ukrainian +wa Walloon walon +zu Zulu + --> + +</resources> \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100644 index 0000000..13be61f --- /dev/null +++ b/res/values/strings.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="name">ASpell Swedish Spellchecker</string> + <string name="settings">ASpell Swedish Spellchecker Settings</string> + <string name="subtype">Swedish</string> + +</resources> \ No newline at end of file diff --git a/res/xml/prefs.xml b/res/xml/prefs.xml new file mode 100644 index 0000000..abf5413 --- /dev/null +++ b/res/xml/prefs.xml @@ -0,0 +1,26 @@ +<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> +<!-- + <PreferenceCategory + android:title="Dictionary Selection" + android:key="first_category"> + + <CheckBoxPreference + android:key="perform_updates" + android:summary="Download missing dictionaries" + android:title="Enable updates" + android:defaultValue="true" + android:enabled="false"/> + + <ListPreference + android:key="available_dicts" + android:title="Selected dictionary" + android:summary="Select which dictionaries to download" + android:defaultValue="sv" + android:entries="@array/dicts" + android:entryValues="@array/dictsVals" + android:dependency="perform_updates" + /> + + </PreferenceCategory> + --> +</PreferenceScreen> \ No newline at end of file diff --git a/res/xml/spellchecker.xml b/res/xml/spellchecker.xml new file mode 100644 index 0000000..412eb53 --- /dev/null +++ b/res/xml/spellchecker.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> + +<!-- The attributes in this XML file provide the configuration information --> +<!-- for the spell checker --> + +<spell-checker xmlns:android="http://schemas.android.com/apk/res/android" + android:label="@string/name" + android:settingsActivity="gr.padeler.aspellchecker.ASpellCheckerActivity"> + <subtype + android:label="@string/subtype" + android:subtypeLocale="sv" /> +</spell-checker> diff --git a/src/gr/padeler/aspellchecker/ASpell.java b/src/gr/padeler/aspellchecker/ASpell.java new file mode 100644 index 0000000..033fb08 --- /dev/null +++ b/src/gr/padeler/aspellchecker/ASpell.java @@ -0,0 +1,42 @@ +/** + * + */ +package gr.padeler.aspellchecker; + +import android.util.Log; + +/** + * @author padeler + * + */ +public class ASpell +{ + public static final String TAG = ASpell.class.getSimpleName(); + + static + { + System.loadLibrary("aspell"); + } + + public ASpell(String dataDir, String locale) + { + Log.d(TAG, "ASpell Speller Initializing...."); + + boolean res = initialize(dataDir, locale); + Log.d(TAG, "ASpell Speller Initialized ("+res+")"); + } + + @Override + protected void finalize() throws Throwable { + destruct(); + } + + private long nativePtr; + + public native String[] check(String str); + public native boolean initialize(String dataDir, String locale); + + public native void destruct(); + + public native void setUserDictionary(String [] words); +} diff --git a/src/gr/padeler/aspellchecker/ASpellCheckerActivity.java b/src/gr/padeler/aspellchecker/ASpellCheckerActivity.java new file mode 100644 index 0000000..cbd03cd --- /dev/null +++ b/src/gr/padeler/aspellchecker/ASpellCheckerActivity.java @@ -0,0 +1,14 @@ +package gr.padeler.aspellchecker; + + +import android.os.Bundle; +import android.preference.PreferenceActivity; + + +public class ASpellCheckerActivity extends PreferenceActivity{ + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + addPreferencesFromResource(R.xml.prefs); + } +} \ No newline at end of file diff --git a/src/gr/padeler/aspellchecker/ASpellCheckerService.java b/src/gr/padeler/aspellchecker/ASpellCheckerService.java new file mode 100644 index 0000000..e7571a8 --- /dev/null +++ b/src/gr/padeler/aspellchecker/ASpellCheckerService.java @@ -0,0 +1,215 @@ +/** + * + */ +package gr.padeler.aspellchecker; + + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; + +import android.content.ContentResolver; +import android.content.SharedPreferences; +import android.content.res.AssetManager; +import android.database.ContentObserver; +import android.database.Cursor; +import android.os.Handler; +import android.preference.PreferenceManager; +import android.provider.ContactsContract.Contacts; +import android.provider.UserDictionary.Words; +import android.service.textservice.SpellCheckerService; +import android.util.Log; +import android.view.textservice.SuggestionsInfo; +import android.view.textservice.TextInfo; + +/** + * @author padeler + * + */ +public class ASpellCheckerService extends SpellCheckerService +{ + + private static final String DATA = "data"; + private static final String TAG = ASpellCheckerService.class.getSimpleName(); + private static final boolean DBG = true; + + private static final String[] PROJECTION = { + Words._ID, + Words.WORD, + Words.FREQUENCY, + Words.LOCALE, + Words.APP_ID + }; + + + @Override + public Session createSession() + { + // check if the data files are correctly copied from the assets. + try{ + String dataDir = checkAndUpdateDataFiles(); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); + String lang = prefs.getString("available_dicts", "sv"); + + return new ASpellCheckerSession(dataDir,getContentResolver()); + + }catch(IOException e) + { + Log.e(TAG,"Failed to initialize ASpellCheckerService", e); + } + return new ASpellCheckerSession("",getContentResolver()); // TODO Find a good way to gracefully fail. This will fail on ASpell initialization. + } + + private String checkAndUpdateDataFiles() throws IOException + { + String []files = getFilesDir().list(); + if(files.length==0) + { + Log.d(TAG, "Data dir is not available. Creating."); + + File dataDir = new File(getFilesDir()+File.separator+DATA); + dataDir.mkdir(); + AssetManager assets = getAssets(); + files = assets.list(DATA); + for(String file:files) + { + String dst = dataDir+File.separator+file; + try{ + Log.d(TAG, "Copying "+file+" from assets to "+dst); + + FileOutputStream fout = new FileOutputStream(dst); + InputStream in = assets.open(DATA+File.separator+file); + + byte buf[] = new byte[1024]; + int count=0; + while((count=in.read(buf))!=-1) + { + fout.write(buf,0,count); + } + in.close(); + fout.close(); + }catch(IOException e){ + throw new IOException("Failed to copy "+file+" to "+dst, e); + } + } + } + + String res = getFilesDir()+File.separator+DATA; + return res; + } + + private static class ASpellCheckerSession extends Session + { + private String mLocale; + private ASpell bridge; + private String dataDir; + private ContentResolver contentResolver; + + public ASpellCheckerSession(String dataDir, final ContentResolver contentResolver) + { + this.dataDir = dataDir; + this.contentResolver = contentResolver; + } + + protected synchronized void UserDictionaryUpdated() + { + Cursor cursor = contentResolver.query(Words.CONTENT_URI, PROJECTION, + Words.LOCALE + " = ?", new String[] {mLocale}, null); + + int index = cursor.getColumnIndex(Words.WORD); + ArrayList<String> words = new ArrayList<String>(); + while (cursor.moveToNext()) + { + words.add(cursor.getString(index)); + } + + cursor = contentResolver.query( Contacts.CONTENT_URI, + new String[]{Contacts.DISPLAY_NAME}, null, null, null); + index = cursor.getColumnIndex(Contacts.DISPLAY_NAME); + while(cursor.moveToNext()) + { + for(String name : cursor.getString(index).split("\\s+")) + { + if(name.matches("(\\p{L}\\p{M}*)+")) + words.add(name); + } + } + + Log.d(TAG,"Loaded user dictionary+contacts with " + words.size() + " words."); + + //Log.d(TAG, "User dictionary: "+ Arrays.toString(words.toArray(new String[]{}))); + + bridge.setUserDictionary(words.toArray(new String[]{})); + } + + @Override + public synchronized void onCreate() + { + + mLocale = getLocale(); + Log.d(TAG, "Creating ASpell Speller. DataDir: "+dataDir+" Lang: "+mLocale); + + bridge = new ASpell(dataDir,mLocale); + + contentResolver.registerContentObserver(Words.CONTENT_URI, true, new ContentObserver(null) { + @Override + public void onChange(boolean selfChange) { + UserDictionaryUpdated(); + } + }); + UserDictionaryUpdated(); + } + + @Override + public synchronized SuggestionsInfo onGetSuggestions(TextInfo textInfo, int suggestionsLimit) + { + mLocale = getLocale(); + String text = textInfo.getText(); + long start = System.currentTimeMillis(); + String []suggestions = bridge.check(text); + long end = System.currentTimeMillis(); + String code = suggestions[0]; + Log.d(TAG, "===Suggestion code ==> "+code); + + if(suggestions.length>1) // we have some suggestions + { + if(suggestions.length>suggestionsLimit+1) + { + String []tmp = new String[suggestionsLimit]; + System.arraycopy(suggestions, 1, tmp, 0, suggestionsLimit); + suggestions = tmp; + } + else // just keep all suggestions + { + String []tmp = new String[suggestions.length-1]; + System.arraycopy(suggestions, 1, tmp, 0, tmp.length); + suggestions = tmp; + } + } + else{ + suggestions = new String[]{}; + } + + if (DBG) + { + Log.d(TAG, "["+mLocale+"].onGetSuggestions ("+textInfo.getText()+","+suggestionsLimit+"): " + " Code : "+code+". Time to ASPELL: "+(end-start)+" ms."); + } + int flags; + if("1".equals(code) || suggestions.length > 0 && suggestions[0].equals(text))// Aspell bug? + { + flags = SuggestionsInfo.RESULT_ATTR_IN_THE_DICTIONARY; + } + else + { + flags = SuggestionsInfo.RESULT_ATTR_LOOKS_LIKE_TYPO; + } + + if(suggestions.length>0) flags |= SuggestionsInfo.RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS; + + return new SuggestionsInfo(flags, suggestions); + } + } +} \ No newline at end of file diff --git a/src/gr/padeler/aspellchecker/ASpellCheckerSettingsFragment.java b/src/gr/padeler/aspellchecker/ASpellCheckerSettingsFragment.java new file mode 100644 index 0000000..de3658a --- /dev/null +++ b/src/gr/padeler/aspellchecker/ASpellCheckerSettingsFragment.java @@ -0,0 +1,27 @@ +/** + * + */ +package gr.padeler.aspellchecker; + + +import android.os.Bundle; +import android.preference.PreferenceFragment; + +/** + * @author padeler + * + */ +public class ASpellCheckerSettingsFragment extends PreferenceFragment +{ + /** + * Empty constructor for fragment generation. + */ + public ASpellCheckerSettingsFragment() { + } + + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + addPreferencesFromResource(R.xml.prefs); + } +}