From e60b1bc3f808812ffb7c02313d29ef18b51fee54 Mon Sep 17 00:00:00 2001 From: Meruemon Date: Tue, 15 Mar 2022 20:34:23 +0100 Subject: [PATCH] removed charset-2.1 --- lib/jcharset-2.1/CHANGES.txt | 110 ---- lib/jcharset-2.1/LICENSE.commercial.txt | 4 - lib/jcharset-2.1/LICENSE.gpl.txt | 339 ------------ lib/jcharset-2.1/README.txt | 153 ------ lib/jcharset-2.1/lib/jcharset-2.1.jar | Bin 72600 -> 0 bytes lib/jcharset-2.1/pom.xml | 84 --- .../freeutils/charset/ByteLookupCharset.java | 293 ----------- .../freeutils/charset/CharsetProvider.java | 150 ------ .../charset/EscapedByteLookupCharset.java | 285 ----------- .../freeutils/charset/HPRoman8Charset.java | 82 --- .../freeutils/charset/ISO88596Charset.java | 88 ---- .../freeutils/charset/ISO88598Charset.java | 98 ---- .../net/freeutils/charset/KOI8UCharset.java | 81 --- .../net/freeutils/charset/KZ1048Charset.java | 87 ---- .../net/freeutils/charset/MIKCharset.java | 87 ---- .../net/freeutils/charset/UTF7Charset.java | 482 ------------------ .../charset/UTF7OptionalCharset.java | 52 -- .../java/net/freeutils/charset/Utils.java | 183 ------- .../freeutils/charset/gsm/CCGSMCharset.java | 50 -- .../charset/gsm/CCPackedGSMCharset.java | 51 -- .../charset/gsm/CRCCPackedGSMCharset.java | 53 -- .../charset/gsm/CRSCPackedGSMCharset.java | 53 -- .../net/freeutils/charset/gsm/GSMCharset.java | 147 ------ .../charset/gsm/PackedGSMCharset.java | 463 ----------------- .../freeutils/charset/gsm/SCGSMCharset.java | 51 -- .../charset/gsm/SCPackedGSMCharset.java | 51 -- .../charset/iso646/ISO646CA2Charset.java | 52 -- .../charset/iso646/ISO646CACharset.java | 52 -- .../charset/iso646/ISO646CHCharset.java | 52 -- .../charset/iso646/ISO646CNCharset.java | 52 -- .../charset/iso646/ISO646CUCharset.java | 52 -- .../charset/iso646/ISO646DECharset.java | 52 -- .../charset/iso646/ISO646DKCharset.java | 52 -- .../charset/iso646/ISO646ES2Charset.java | 52 -- .../charset/iso646/ISO646ESCharset.java | 52 -- .../charset/iso646/ISO646FISECharset.java | 52 -- .../charset/iso646/ISO646FR1Charset.java | 52 -- .../charset/iso646/ISO646FRCharset.java | 52 -- .../charset/iso646/ISO646GBCharset.java | 52 -- .../charset/iso646/ISO646HUCharset.java | 52 -- .../charset/iso646/ISO646IECharset.java | 52 -- .../charset/iso646/ISO646INVCharset.java | 52 -- .../charset/iso646/ISO646IRVCharset.java | 52 -- .../charset/iso646/ISO646ISCharset.java | 52 -- .../charset/iso646/ISO646ITCharset.java | 52 -- .../charset/iso646/ISO646JAOCharset.java | 52 -- .../charset/iso646/ISO646JPCharset.java | 52 -- .../charset/iso646/ISO646KRCharset.java | 52 -- .../charset/iso646/ISO646MTCharset.java | 52 -- .../charset/iso646/ISO646NO2Charset.java | 52 -- .../charset/iso646/ISO646NOCharset.java | 52 -- .../charset/iso646/ISO646PT2Charset.java | 52 -- .../charset/iso646/ISO646PTCharset.java | 52 -- .../charset/iso646/ISO646SE2Charset.java | 52 -- .../charset/iso646/ISO646T61Charset.java | 52 -- .../charset/iso646/ISO646TWCharset.java | 52 -- .../charset/iso646/ISO646USCharset.java | 56 -- .../charset/iso646/ISO646YUCharset.java | 52 -- .../java.nio.charset.spi.CharsetProvider | 1 - 59 files changed, 5246 deletions(-) delete mode 100644 lib/jcharset-2.1/CHANGES.txt delete mode 100644 lib/jcharset-2.1/LICENSE.commercial.txt delete mode 100644 lib/jcharset-2.1/LICENSE.gpl.txt delete mode 100644 lib/jcharset-2.1/README.txt delete mode 100644 lib/jcharset-2.1/lib/jcharset-2.1.jar delete mode 100644 lib/jcharset-2.1/pom.xml delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/ByteLookupCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/CharsetProvider.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/EscapedByteLookupCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/HPRoman8Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/ISO88596Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/ISO88598Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/KOI8UCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/KZ1048Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/MIKCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/UTF7Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/UTF7OptionalCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/Utils.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CCGSMCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CCPackedGSMCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CRCCPackedGSMCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CRSCPackedGSMCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/GSMCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/PackedGSMCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/SCGSMCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/SCPackedGSMCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CA2Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CACharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CHCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CNCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CUCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646DECharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646DKCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ES2Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ESCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FISECharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FR1Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FRCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646GBCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646HUCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646IECharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646INVCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646IRVCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ISCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ITCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646JAOCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646JPCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646KRCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646MTCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646NO2Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646NOCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646PT2Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646PTCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646SE2Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646T61Charset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646TWCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646USCharset.java delete mode 100644 lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646YUCharset.java delete mode 100644 lib/jcharset-2.1/src/main/resources/META-INF/services/java.nio.charset.spi.CharsetProvider diff --git a/lib/jcharset-2.1/CHANGES.txt b/lib/jcharset-2.1/CHANGES.txt deleted file mode 100644 index 1edc83d..0000000 --- a/lib/jcharset-2.1/CHANGES.txt +++ /dev/null @@ -1,110 +0,0 @@ - - -CHANGES IN THE 2.1 RELEASE --------------------------- -- Added CR padding support to PackedGSMCharset. -- Added CRCCPackedGSMCharset and CRSCPackedGSMCharset packed GSM variants with CR padding enabled. -- Added KZ-1048 charset, with aliases STRK1048-2002, RK1048, csKZ1048. -- Improved javadocs. - - - - -CHANGES IN THE 2.0 RELEASE --------------------------- -- Added 32 national variants of the ISO/IEC 646 charset. -- Moved GSM classes to separate sub-package. -- Changed UTF-7 decoding to be lenient in accepting trailing zero bits in shift sequences. -- Changed UTF7Charset.contains to reflect full Unicode equivalency. -- Added a command-line utility supporting file charset conversion. -- Added ByteLookupCharset.createTable utility method. -- Generalized createInverseLookupTableDefinition to Utils.toInverseLookupTableDefinition. -- Applied many refactorings, simplifications, clarifications and clean-ups. -- Applied various optimizations to encode/decode loops. -- Improved docs. - - - - -CHANGES IN THE 1.6 RELEASE --------------------------- -- Migrated to Maven build system, directory structure and artifact conventions. -- Added OSGi headers to jar manifest. -- Fixed javadoc errors when building with JDK 8. -- Improved javadocs and misc. minor refactorings. - - - - -CHANGES IN THE 1.5 RELEASE --------------------------- -- Fixed GSMCharset encoding of non-breakable space character (0x00A0), which shouldn't be encoded. -- Fixed PackedGSMCharset decoder edge case of handling overflow continuation for large strings (>256) - when calling decoder directly (not via String methods). -- Fixed PackedGSMCharset decoder edge case of string size which is a multiple of internal buffer size (256) - greater than 256 and has escaped characters on decoded buffer boundaries. -- Simplified CharsetProvider.charsetForName flow. - - - - -CHANGES IN THE 1.4 RELEASE --------------------------- -- Dropped support for JDK 1.4 and earlier. -- Added MIK charset. -- Added KOI8_U as a KOI8-U alias. -- Optimized EscapedByteLookupCharset encoding buffer allocation for strings with no escape chars. -- Added ByteLookupCharset.updateInverseLookupTable convenience method. -- Improved docs. - - - - -CHANGES IN THE 1.3 RELEASE --------------------------- -- Added X-roman8 as an hp-roman8 alias. -- Added the generic EscapedByteLookupCharset to simplify implementation of single-escape-byte charsets. -- Created two flavors of the GSM charset: CCGSMCharset (mapping the Latin capital letter C with cedilla) - and SCGSMCharset (mapping the Latin small letter c with cedilla). See javadocs for details. -- Added support for Packed GSM charset, with the two flavors as well. -- Renamed the canonical charset name for the new GSM family, to make the flavor choices explicit. - - - - -CHANGES IN THE 1.2.1 RELEASE ----------------------------- -- Fixed a combined JavaMail-JCharset bug that could cause an infinite loop on some inputs. -- Updated the ISO-8859-8-i/e mapping for the MACRON character. - The incorrect mapping in the JDK's implementation of ISO-8859-8 is fixed as of JDK 1.5 - (see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4760496). We now determine the - running JDK version, and if it's JDK 1.5 or higher we use the correct mapping. This - way we remain consistent with the running JDK ISO-8859-8 charset implementation. - - - - -CHANGES IN THE 1.2 RELEASE --------------------------- -- Added KOI8-U charset. - - - - -CHANGES IN THE 1.1 RELEASE --------------------------- - -- Added ByteLookupCharset class to simplify implementation of single byte charsets. -- Added GSM-default-alphabet charset (used in SMPP). -- Added hp-roman8 charset. -- Added ISO-8859-8-i/e charset. -- Added ISO-8859-6-i/e charset. - - - - -CHANGES IN THE 1.0 RELEASE --------------------------- - -- This is the first release of the Java Charset package. - diff --git a/lib/jcharset-2.1/LICENSE.commercial.txt b/lib/jcharset-2.1/LICENSE.commercial.txt deleted file mode 100644 index bd21975..0000000 --- a/lib/jcharset-2.1/LICENSE.commercial.txt +++ /dev/null @@ -1,4 +0,0 @@ - -This software is dual-licensed - a commercial licensing option is available for those who need it. - -For details, please contact support@freeutils.net. diff --git a/lib/jcharset-2.1/LICENSE.gpl.txt b/lib/jcharset-2.1/LICENSE.gpl.txt deleted file mode 100644 index 89e08fb..0000000 --- a/lib/jcharset-2.1/LICENSE.gpl.txt +++ /dev/null @@ -1,339 +0,0 @@ - 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/lib/jcharset-2.1/README.txt b/lib/jcharset-2.1/README.txt deleted file mode 100644 index 0f7ce63..0000000 --- a/lib/jcharset-2.1/README.txt +++ /dev/null @@ -1,153 +0,0 @@ - - -JCharset - Java Charset package 2.1 -=================================== - -Copyright © 2005-2019 Amichai Rothman - - - -1. What is the Java Charset package? - - The Java Charset package is an open-source implementation of character - sets that were missing from the standard Java platform. - - It has been in use in many production systems around the world for over a - decade, including products by small start-ups, large open-source service - providers, and well-known multinational corporations. - - -2. How do I use the Java Charset package? - - The Java Charset package is written in pure Java, runs on JDK 1.5 or later, - and requires no special installation - just add the jar file to your - classpath, or place it in any of the usual extension directories. - - It is also available on Maven Central at the artifact coordinates - net.freeutils:jcharset:2.1. - - The JVM will recognize the supported character sets automatically, and they - will be available anywhere character sets are used in the Java platform. - - As an example, you can take a look at java.lang.String's constructor and - getBytes() method, both of which have an overloaded version that receives - a charset name as an argument. - - A command-line utility is included which supports converting files - between charsets. For help on usage and available options, run it using - the command 'java -jar jcharset-2.1.jar -h'. - - Note: Some web/mail containers run each application in its own JVM context. - In this case check the container documentation for information on where and - how to configure the classpath, such as in WEB-INF/lib, shared/lib, - jre/lib/ext, etc. You may need to restart the server for changes to take - effect. However, if you use Oracle's JRE, it will work only if you put it in - the jre/lib/ext extension directory, or in the container's classpath. - This is due to a bug in Oracle's JRE implementation - (http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4619777). - -3. Which charsets are supported? - - "UTF-7" (a.k.a. "UTF7", "UNICODE-1-1-UTF-7", "csUnicode11UTF7", - "UNICODE-2-0-UTF-7") - The 7-bit Unicode character encoding defined in RFC 2152. - The O-set characters are encoded as a shift sequence. - Both O-set flavors (direct and shifted) are decoded. - - "UTF-7-OPTIONAL" (a.k.a. "UTF-7O", "UTF7O", "UTF-7-O") - The 7-bit Unicode character encoding defined in RFC 2152. - The O-set characters are directly encoded. - Both O-set flavors (direct and shifted) are decoded. - - "SCGSM" (a.k.a. "GSM-default-alphabet", "GSM_0338", "GSM_DEFAULT", - "GSM7", "GSM-7BIT") - The GSM default charset as specified in GSM 03.38, used in SMPP for - encoding SMS text messages. - - Additional flavors of the GSM charset are "CCGSM", "SCPGSM", "CCPGSM", - "CRSCPGSM" and "CRCCPGSM": The CC prefix signifies mapping the Latin - capital letter C with cedilla character, the SC prefix signifies - mapping the Latin small letter c with cedilla character, the P prefix - signifies the packed form (8 characters packed in 7 bytes), and the - CR prefix signifies padding with CR instead of zeros to avoid ambiguity, - all as specified by the spec. See javadocs for details. - - "hp-roman8" (a.k.a. "roman8", "r8", "csHPRoman8", "X-roman8") - The HP Roman-8 charset, as provided in RFC 1345. - - ISO/IEC 646 National Variants: - "ISO646-CA" ("ISO-IR-121") - "ISO646-CA2" ("ISO-IR-122") - "ISO646-CH" - "ISO646-CN" ("ISO-IR-57") - "ISO646-CU" ("ISO-IR-151") - "ISO646-DE" ("ISO-IR-21", "DIN_66003") - "ISO646-DK" - "ISO646-ES" ("ISO-IR-17") - "ISO646-ES2" ("ISO-IR-85") - "ISO646-FI" ("ISO646-SE", "ISO-IR-10") - "ISO646-FR" ("ISO-IR-69") - "ISO646-FR1" ("ISO-IR-25") - "ISO646-GB" ("ISO-IR-4") - "ISO646-HU" ("ISO-IR-86") - "ISO646-IE" ("ISO-IR-207") - "ISO646-INV" ("ISO-IR-170") - "ISO646-IRV" ("ISO-IR-2", "ISO_646.IRV:1983") - "ISO646-IS" - "ISO646-IT" ("ISO-IR-15") - "ISO646-JAO" ("ISO646-JP-OCR-B", "ISO-IR-92") - "ISO646-JP" ("ISO-IR-14") - "ISO646-KR" - "ISO646-MT" - "ISO646-NO" ("ISO-IR-60") - "ISO646-NO2" ("ISO-IR-61") - "ISO646-PT" ("ISO-IR-16") - "ISO646-PT2" ("ISO-IR-84") - "ISO646-SE2" ("ISO-IR-11") - "ISO646-T61" ("ISO-IR-102") - "ISO646-TW" - "ISO646-US" ("ISO-IR-6", "ISO_646.irv:1991") - "ISO646-YU" ("ISO-IR-141") - - "ISO-8859-8-BIDI" (a.k.a. "csISO88598I", "ISO-8859-8-I", "ISO_8859-8-I", - "csISO88598E", "ISO-8859-8-E", "ISO_8859-8-E") - The ISO 8859-8 charset implementation exists in the standard JRE. - However, it is lacking the i/e aliases, which specify whether - bidirectionality is implicit or explicit. The charsets conversions - themselves are similar. This charset complements the standard one. - - "ISO-8859-6-BIDI" (a.k.a. "csISO88596I", "ISO-8859-6-I", "ISO_8859-6-I", - "csISO88596E", "ISO-8859-6-E", "ISO_8859-6-E") - The ISO 8859-6 charset implementation exists in the standard JRE. - However, it is lacking the i/e aliases, which specify whether - bidirectionality is implicit or explicit. The charsets conversions - themselves are similar. This charset complements the standard one. - - "KOI8-U" (a.k.a. "KOI8-RU", "KOI8_U") - The KOI8-U Ukrainian charset, as defined in RFC 2319. - - "KZ-1048" (a.k.a. "STRK1048-2002", "RK1048", "csKZ1048") - The KZ-1048 charset, which is the Kazakhstan national standard. - - "MIK" - The MIK cyrillic code page, commonly used by DOS applications - in Bulgaria. - - -4. License - - The Java Charset package is provided under the GNU General Public - License agreement. Please read the full license agreement in the - included LICENSE.gpl.txt file. - - For non-GPL commercial licensing please contact the address below. - - -5. Contact - - Please write to support@freeutils.net with any bugs, suggestions, fixes, - contributions, or just to drop a good word and let me know you've found - this package useful and you'd like it to keep being maintained. - - Updates and additional info can be found at - http://www.freeutils.net/source/jcharset/ diff --git a/lib/jcharset-2.1/lib/jcharset-2.1.jar b/lib/jcharset-2.1/lib/jcharset-2.1.jar deleted file mode 100644 index f2166e440de8a3f8d5b0a258fb47f8b543ea524d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72600 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 R&>t%vXbA|kF$E0l{{haw-E#l{ diff --git a/lib/jcharset-2.1/pom.xml b/lib/jcharset-2.1/pom.xml deleted file mode 100644 index 365b14c..0000000 --- a/lib/jcharset-2.1/pom.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - 4.0.0 - - - net.freeutils - parent - 1.0 - ../parent/pom.xml - - - jcharset - 2.1 - jar - - JCharset - The Java Charset package - http://www.freeutils.net/source/jcharset/ - - - GNU General Public License (GPL), Version 2.0 - http://www.gnu.org/licenses/gpl-2.0.html - - - Commercial License - LICENSE.commercial.txt - - - - - 1.5 - java15 - false - - - - - - - org.apache.felix - maven-bundle-plugin - - - bundle-manifest - process-classes - - manifest - - - - ${bundle.symbolicName} - ${project.version} - ${bundle.namespace}.*;version="${project.version}" - ${bundle.namespace}.* - - - osgi.serviceloader; osgi.serviceloader=java.nio.charset.spi.CharsetProvider - - - jar - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - true - - - net.freeutils.charset.Utils - - - - - - - - diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ByteLookupCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ByteLookupCharset.java deleted file mode 100644 index 374f31c..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ByteLookupCharset.java +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.CoderResult; -import java.util.Arrays; - -/** - * The ByteLookupCharset class handles the encoding and decoding of - * single-byte charsets where the byte-to-char conversion is performed - * using a simple lookup table. - * - * @author Amichai Rothman - * @since 2005-06-30 - */ -public abstract class ByteLookupCharset extends Charset { - - final int[] byteToChar; - final int[][] charToByte; - - /** - * Creates a new lookup table with 256 elements, all initialized to -1. - * - * @return the new table - */ - public static int[] createTable() { - int[] table = new int[256]; - Arrays.fill(table, -1); - return table; - } - - /** - * Returns a copy of the given array in which several items - * are modified. - * - * @param src the array to mutate - * @param indices the array of indices at which the values will be modified - * @param values the respective values to place in these indices - * @return the mutated array - */ - public static int[] mutate(int[] src, int[] indices, int[] values) { - int[] mutated = new int[src.length]; - System.arraycopy(src, 0, mutated, 0, src.length); - for (int i = 0; i < indices.length; i++) - mutated[indices[i]] = values[i]; - return mutated; - } - - /** - * Creates an inverse lookup table for the given byte-to-char lookup table. - *

- * The returned table contains 256 tables, one per high-order byte of a - * potential character to be converted (unused ones are null), and each - * such table can be indexed using the character's low-order byte, to - * obtain the actual converted byte value. - * A null table in the top level table, or a -1 within a lower level table, - * both indicate that there is no legal mapping for the given character. - * - * @param chars a lookup table which holds the character value - * that each byte value (0-255) is converted to - * @return the created inverse lookup (char-to-byte) table - */ - public static int[][] createInverseLookupTable(int[] chars) { - int[][] tables = new int[256][]; - for (int i = 0; i < 256; i++) { - int c = chars[i]; - if (c > -1) - updateInverseLookupTable(tables, c, i); - } - return tables; - } - - /** - * Updates an inverse lookup table with an additional mapping, - * replacing a previous mapping of the same value if it exists. - * - * @param tables the inverse lookup table to update - * (see {@link #createInverseLookupTable}) - * @param c the character to map - * @param b the byte value to which c is mapped, or -1 to mark an illegal mapping - * @return the updated inverse lookup (char-to-byte) table - */ - public static int[][] updateInverseLookupTable(int[][] tables, int c, int b) { - int high = (c >>> 8) & 0xFF; - int low = c & 0xFF; - int[] table = tables[high]; - if (table != null) { - table[low] = b; - } else if (b > -1) { - table = createTable(); - tables[high] = table; - table[low] = b; - } - return tables; - } - - /** - * Updates an inverse lookup table with additional mappings, - * replacing previous mappings of the same values if they exists. - * - * @param tables the inverse lookup table to update - * (see {@link #createInverseLookupTable}) - * @param chars the characters to map - * @param bytes the respective byte values to which the chars are mapped, - * or -1 to mark an illegal mapping - * @return the updated inverse lookup (char-to-byte) table - */ - public static int[][] updateInverseLookupTable(int[][] tables, int[] chars, int[] bytes) { - for (int i = 0; i < chars.length; i++) - updateInverseLookupTable(tables, chars[i], bytes[i]); - return tables; - } - - /** - * Initializes a new charset with the given canonical name and alias - * set, and byte-to-char/char-to-byte lookup tables. - * - * @param canonicalName the canonical name of this charset - * @param aliases an array of this charset's aliases, or null if it has no aliases - * @param byteToChar a byte-to-char conversion table for this charset - * @param charToByte a char-to-byte conversion table for this charset. It can - * be generated on-the-fly by calling createInverseLookupTable(byteToChar). - * @throws java.nio.charset.IllegalCharsetNameException - * if the canonical name or any of the aliases are illegal - */ - protected ByteLookupCharset(String canonicalName, String[] aliases, - int[] byteToChar, int[][] charToByte) { - super(canonicalName, aliases); - this.byteToChar = byteToChar; - this.charToByte = charToByte; - } - - /** - * Tells whether or not this charset contains the given charset. - * - *

A charset C is said to contain a charset D if, - * and only if, every character representable in D is also - * representable in C. If this relationship holds then it is - * guaranteed that every string that can be encoded in D can also be - * encoded in C without performing any replacements. - * - *

That C contains D does not imply that each character - * representable in C by a particular byte sequence is represented - * in D by the same byte sequence, although sometimes this is the - * case. - * - *

Every charset contains itself. - * - *

This method computes an approximation of the containment relation: - * If it returns true then the given charset is known to be - * contained by this charset; if it returns false, however, then - * it is not necessarily the case that the given charset is not contained - * in this charset. - * - * @param charset the given charset - * - * @return true if the given charset is contained in this charset - */ - @Override - public boolean contains(Charset charset) { - return this.getClass().isInstance(charset); - } - - /** - * Constructs a new decoder for this charset. - * - * @return a new decoder for this charset - */ - @Override - public CharsetDecoder newDecoder() { - return new Decoder(this); - } - - /** - * Constructs a new encoder for this charset. - * - * @return a new encoder for this charset - */ - @Override - public CharsetEncoder newEncoder() { - return new Encoder(this); - } - - /** - * The Encoder inner class handles the encoding of the - * charset using the lookup table. - */ - protected class Encoder extends CharsetEncoder { - - /** - * Constructs an Encoder. - * - * @param charset the charset that created this encoder - */ - protected Encoder(Charset charset) { - super(charset, 1f, 1f); - } - - /** - * Encodes one or more characters into one or more bytes. - * - * @param in the input character buffer - * @param out the output byte buffer - * @return a coder-result object describing the reason for termination - */ - @Override - protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) { - int[][] lookup = charToByte; // getfield bytecode optimization - int remainingIn = in.remaining(); - int remainingOut = out.remaining(); - while (remainingIn-- > 0) { - if (remainingOut-- < 1) - return CoderResult.OVERFLOW; // we need exactly one byte per char - int c = in.get(); - int[] table = lookup[c >>> 8]; - int b = table == null ? -1 : table[c & 0xFF]; - if (b == -1) { - in.position(in.position() - 1); - return CoderResult.unmappableForLength(1); - } - out.put((byte)(b & 0xFF)); - } - return CoderResult.UNDERFLOW; - } - - } - - /** - * The Decoder inner class handles the decoding of the - * charset using the inverse lookup table. - */ - protected class Decoder extends CharsetDecoder { - - /** - * Constructs a Decoder. - * - * @param charset the charset that created this decoder - */ - protected Decoder(Charset charset) { - super(charset, 1f, 1f); - } - - /** - * Decodes one or more bytes into one or more characters. - * - * @param in the input byte buffer - * @param out the output character buffer - * @return a coder-result object describing the reason for termination - */ - @Override - protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) { - int[] lookup = byteToChar; // getfield bytecode optimization - int remainingIn = in.remaining(); - int remainingOut = out.remaining(); - while (remainingIn-- > 0) { - if (remainingOut-- < 1) - return CoderResult.OVERFLOW; // we need exactly one char per byte - int c = lookup[in.get() & 0xFF]; - if (c == -1) { - in.position(in.position() - 1); - return CoderResult.malformedForLength(1); - } - out.put((char)c); - } - return CoderResult.UNDERFLOW; - } - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/CharsetProvider.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/CharsetProvider.java deleted file mode 100644 index 274701f..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/CharsetProvider.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -import java.nio.charset.Charset; -import java.util.*; -import net.freeutils.charset.gsm.*; -import net.freeutils.charset.iso646.*; - -/** - * The CharsetProvider class is a Charset Provider implementation. - * - * @author Amichai Rothman - * @since 2005-06-10 - */ -public class CharsetProvider extends java.nio.charset.spi.CharsetProvider { - - static Map nameToCharset; - static Collection charsets; - - /** - * Retrieves a charset for the given charset name. - * - * @param charsetName the name of the requested charset; - * may be either a canonical name or an alias - * - * @return a charset object for the named charset, - * or null if the named charset - * is not supported by this provider - */ - @Override - public Charset charsetForName(String charsetName) { - if (nameToCharset == null) - init(); - - // get charset instance for given name (case insensitive) - Charset charset = nameToCharset.get(charsetName.toLowerCase()); - if (charset != null) { - try { - return charset.getClass().newInstance(); - } catch (Exception ignore) { - // if we can't create an instance, we don't - } - } - return null; - } - - /** - * Creates an iterator that iterates over the charsets supported by this - * provider. This method is used in the implementation of the {@link - * java.nio.charset.Charset#availableCharsets Charset.availableCharsets} - * method. - * - * @return the new iterator - */ - @Override - public Iterator charsets() { - if (charsets == null) - init(); - - return charsets.iterator(); - } - - /** - * Initializes this charset provider's data. - */ - void init() { - // prepare supported charsets - Charset[] allCharsets = { - new UTF7Charset(), - new UTF7OptionalCharset(), - new SCGSMCharset(), - new CCGSMCharset(), - new SCPackedGSMCharset(), - new CCPackedGSMCharset(), - new CRSCPackedGSMCharset(), - new CRCCPackedGSMCharset(), - new HPRoman8Charset(), - new KOI8UCharset(), - new KZ1048Charset(), - new ISO88598Charset(), - new ISO88596Charset(), - new MIKCharset(), - new ISO646CACharset(), - new ISO646CA2Charset(), - new ISO646CHCharset(), - new ISO646CNCharset(), - new ISO646CUCharset(), - new ISO646DECharset(), - new ISO646DKCharset(), - new ISO646ESCharset(), - new ISO646ES2Charset(), - new ISO646FISECharset(), - new ISO646FRCharset(), - new ISO646FR1Charset(), - new ISO646GBCharset(), - new ISO646HUCharset(), - new ISO646IECharset(), - new ISO646INVCharset(), - new ISO646IRVCharset(), - new ISO646ISCharset(), - new ISO646ITCharset(), - new ISO646JAOCharset(), - new ISO646JPCharset(), - new ISO646KRCharset(), - new ISO646MTCharset(), - new ISO646NO2Charset(), - new ISO646NOCharset(), - new ISO646PTCharset(), - new ISO646PT2Charset(), - new ISO646SE2Charset(), - new ISO646T61Charset(), - new ISO646TWCharset(), - new ISO646USCharset(), - new ISO646YUCharset(), - }; - - // initialize charset collection - charsets = Collections.unmodifiableCollection(Arrays.asList(allCharsets)); - - // initialize name to charset map - Map map = new HashMap(); - for (Charset charset : allCharsets) { - map.put(charset.name().toLowerCase(), charset); - for (String alias : charset.aliases()) - map.put(alias.toLowerCase(), charset); - } - nameToCharset = map; - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/EscapedByteLookupCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/EscapedByteLookupCharset.java deleted file mode 100644 index 887ba3f..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/EscapedByteLookupCharset.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.CoderResult; - -/** - * The EscapedByteLookupCharset class handles the encoding and - * decoding of simple charsets where the byte-to-char conversion - * is performed using a simple lookup table, with the addition of a special - * escape byte, such that the single byte following it is converted using - * an alternate lookup table. - * - * @author Amichai Rothman - * @since 2007-03-26 - */ -public abstract class EscapedByteLookupCharset extends Charset { - - final int[] byteToChar; - final int[] byteToCharEscaped; - final int[][] charToByte; - final int[][] charToByteEscaped; - final byte escapeByte; - - /** - * Initializes a new charset with the given canonical name and alias - * set, and byte-to-char/char-to-byte lookup tables. - * - * @param canonicalName the canonical name of this charset - * @param aliases an array of this charset's aliases, or null if it has no aliases - * @param escapeByte the special escape byte value - * @param byteToChar a byte-to-char conversion table for this charset - * @param byteToCharEscaped a byte-to-char conversion table for this charset - * for the escaped characters - * @param charToByte a char-to-byte conversion table for this charset. It can - * be generated on-the-fly by calling - * {@link ByteLookupCharset#createInverseLookupTable - * createInverseLookupTable(byteToChar)}. - * @param charToByteEscaped a char-to-byte conversion table for this charset - * for the escaped characters - * @throws java.nio.charset.IllegalCharsetNameException - * if the canonical name or any of the aliases are illegal - */ - protected EscapedByteLookupCharset(String canonicalName, String[] aliases, - byte escapeByte, int[] byteToChar, int[] byteToCharEscaped, - int[][] charToByte, int[][] charToByteEscaped) { - super(canonicalName, aliases); - this.escapeByte = escapeByte; - this.byteToChar = byteToChar; - this.charToByte = charToByte; - this.byteToCharEscaped = byteToCharEscaped; - this.charToByteEscaped = charToByteEscaped; - } - - /** - * Tells whether or not this charset contains the given charset. - * - *

A charset C is said to contain a charset D if, - * and only if, every character representable in D is also - * representable in C. If this relationship holds then it is - * guaranteed that every string that can be encoded in D can also be - * encoded in C without performing any replacements. - * - *

That C contains D does not imply that each character - * representable in C by a particular byte sequence is represented - * in D by the same byte sequence, although sometimes this is the - * case. - * - *

Every charset contains itself. - * - *

This method computes an approximation of the containment relation: - * If it returns true then the given charset is known to be - * contained by this charset; if it returns false, however, then - * it is not necessarily the case that the given charset is not contained - * in this charset. - * - * @param charset the given charset - * - * @return true if the given charset is contained in this charset - */ - @Override - public boolean contains(Charset charset) { - return this.getClass().isInstance(charset); - } - - /** - * Constructs a new decoder for this charset. - * - * @return a new decoder for this charset - */ - @Override - public CharsetDecoder newDecoder() { - return new Decoder(this); - } - - /** - * Constructs a new encoder for this charset. - * - * @return a new encoder for this charset - */ - @Override - public CharsetEncoder newEncoder() { - return new Encoder(this); - } - - /** - * The Encoder inner class handles the encoding of the - * charset using the lookup tables. - */ - protected class Encoder extends CharsetEncoder { - - /** - * Constructs an Encoder. - * - * @param charset the charset that created this encoder - */ - protected Encoder(Charset charset) { - super(charset, 1f, 2f); - } - - /** - * Constructs an Encoder. - * - * @param charset the charset that created this encoder - * @param averageBytesPerChar a positive float value indicating the expected - * number of bytes that will be produced for each input character - * - * @param maxBytesPerChar a positive float value indicating the maximum - * number of bytes that will be produced for each input character - */ - protected Encoder(Charset charset, float averageBytesPerChar, float maxBytesPerChar) { - super(charset, averageBytesPerChar, maxBytesPerChar); - } - - /** - * Encodes one or more characters into one or more bytes. - * - * @param in the input character buffer - * @param out the output byte buffer - * @return a coder-result object describing the reason for termination - */ - @Override - protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) { - byte escape = escapeByte; // getfield bytecode optimization - int[][] lookup = charToByte; // getfield bytecode optimization - int[][] lookupEscaped = charToByteEscaped; // getfield bytecode optimization - int remainingIn = in.remaining(); - int remainingOut = out.remaining(); - while (remainingIn-- > 0) { - // make sure we have room for output - if (remainingOut-- < 1) - return CoderResult.OVERFLOW; - // get next char - int c = in.get(); - // look for corresponding regular byte - int[] table = lookup[c >> 8]; - int b = table == null ? -1 : table[c & 0xFF]; - if (b == -1) { - // look for corresponding escaped byte - table = lookupEscaped[c >> 8]; - b = table == null ? -1 : table[c & 0xFF]; - if (b == -1) { - // there's no regular nor escaped byte - it's unmappable - in.position(in.position() - 1); // unread the char - return CoderResult.unmappableForLength(1); - } - // it's an escapable char, make sure we have room for extra output - if (remainingOut-- < 1) { - in.position(in.position() - 1); // unread the char - return CoderResult.OVERFLOW; - } - // write the escape byte (output byte will follow) - out.put(escape); - } - // write the output byte - out.put((byte)(b & 0xFF)); - } - // no more input available - return CoderResult.UNDERFLOW; - } - - } - - /** - * The Decoder inner class handles the decoding of the - * charset using the inverse lookup tables. - */ - protected class Decoder extends CharsetDecoder { - - /** - * Constructs a Decoder. - * - * @param charset the charset that created this decoder - */ - protected Decoder(Charset charset) { - super(charset, 1f, 1f); - } - - /** - * Constructs a Decoder. - * - * @param charset the charset that created this decoder - * @param averageCharsPerByte a positive float value indicating the expected - * number of characters that will be produced for each input byte - * @param maxCharsPerByte a positive float value indicating the maximum - * number of characters that will be produced for each input byte - */ - protected Decoder(Charset charset, float averageCharsPerByte, float maxCharsPerByte) { - super(charset, averageCharsPerByte, maxCharsPerByte); - } - - /** - * Decodes one or more bytes into one or more characters. - * - * @param in the input byte buffer - * @param out the output character buffer - * @return a coder-result object describing the reason for termination - */ - @Override - protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) { - byte escape = escapeByte; // getfield bytecode optimization - int[] lookup = byteToChar; // getfield bytecode optimization - int[] lookupEscaped = byteToCharEscaped; // getfield bytecode optimization - int remainingIn = in.remaining(); - int remainingOut = out.remaining(); - while (remainingIn-- > 0) { - // make sure we have room for output - if (remainingOut-- < 1) - return CoderResult.OVERFLOW; - // get next byte - int c; - int b = in.get(); - if (b == escape) { - // it's the escape byte - make sure we have the next byte - if (remainingIn-- < 1) { - in.position(in.position() - 1); // unread the byte - return CoderResult.UNDERFLOW; - } - // get next byte - b = in.get(); - // look for corresponding escaped char - c = lookupEscaped[b & 0xFF]; - } else { - // look for corresponding regular char - c = lookup[b & 0xFF]; - } - - if (c == -1) { - // there's no regular nor escaped char - it's malformed - in.position(in.position() - 1); // unread the byte - return CoderResult.malformedForLength(1); - } - // write the output char - out.put((char)c); - } - // no more input available - return CoderResult.UNDERFLOW; - } - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/HPRoman8Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/HPRoman8Charset.java deleted file mode 100644 index 3cc03a2..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/HPRoman8Charset.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -/** - * The HPRoman8Charset class handles the encoding and decoding of the - * HP Roman-8 charset, as provided in RFC 1345. - * - * @author Amichai Rothman - * @since 2005-06-30 - */ -public class HPRoman8Charset extends ByteLookupCharset { - - static final String NAME = "hp-roman8"; - - static final String[] ALIASES = { - "roman8", "r8", "csHPRoman8", "X-roman8" }; - - static final int[] BYTE_TO_CHAR = { - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, - 0x00A0, 0x00C0, 0x00C2, 0x00C8, 0x00CA, 0x00CB, 0x00CE, 0x00CF, - 0x00B4, 0x02CB, 0x02C6, 0x00A8, 0x02DC, 0x00D9, 0x00DB, 0x20A4, - 0x00AF, 0x00DD, 0x00FD, 0x00B0, 0x00C7, 0x00E7, 0x00D1, 0x00F1, - 0x00A1, 0x00BF, 0x00A4, 0x00A3, 0x00A5, 0x00A7, 0x0192, 0x00A2, - 0x00E2, 0x00EA, 0x00F4, 0x00FB, 0x00E1, 0x00E9, 0x00F3, 0x00FA, - 0x00E0, 0x00E8, 0x00F2, 0x00F9, 0x00E4, 0x00EB, 0x00F6, 0x00FC, - 0x00C5, 0x00EE, 0x00D8, 0x00C6, 0x00E5, 0x00ED, 0x00F8, 0x00E6, - 0x00C4, 0x00EC, 0x00D6, 0x00DC, 0x00C9, 0x00EF, 0x00DF, 0x00D4, - 0x00C1, 0x00C3, 0x00E3, 0x00D0, 0x00F0, 0x00CD, 0x00CC, 0x00D3, - 0x00D2, 0x00D5, 0x00F5, 0x0160, 0x0161, 0x00DA, 0x0178, 0x00FF, - 0x00DE, 0x00FE, 0x00B7, 0x00B5, 0x00B6, 0x00BE, 0x2014, 0x00BC, - 0x00BD, 0x00AA, 0x00BA, 0x00AB, 0x25A0, 0x00BB, 0x00B1, -1, - }; - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the HPRoman8Charset. - */ - public HPRoman8Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ISO88596Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ISO88596Charset.java deleted file mode 100644 index dd56a8b..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ISO88596Charset.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -/** - * The ISO88596Charset class handles the encoding and decoding of the - * ISO 8859-6 charset. Although the JRE includes an implementation of this - * charset, it does not recognize two aliases for this charset: - * ISO-8859-6-i and ISO-8859-6-e. These signify whether bidirectionality - * is implicit or explicit. However, this is the displayer's responsibility - * in any case, and the character conversion is the same. - * See RFC 1556. - * - * @author Amichai Rothman - * @since 2005-06-30 - */ -public class ISO88596Charset extends ByteLookupCharset { - - static final String NAME = "ISO-8859-6-BIDI"; - - static final String[] ALIASES = { - "csISO88596I", "ISO-8859-6-I", "ISO_8859-6-I", - "csISO88596E", "ISO-8859-6-E", "ISO_8859-6-E" }; - - static final int[] BYTE_TO_CHAR = { - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, -1, -1, -1, 0x00a4, -1, -1, -1, - -1, -1, -1, -1, 0x060c, 0x00ad, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 0x061b, -1, -1, -1, 0x061f, - -1, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, - 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, - 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, - 0x0638, 0x0639, 0x063a, -1, -1, -1, -1, -1, - 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, - 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, - 0x0650, 0x0651, 0x0652, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - }; - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO88596Charset. - */ - public ISO88596Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ISO88598Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ISO88598Charset.java deleted file mode 100644 index e081e4f..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/ISO88598Charset.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -/** - * The ISO88598Charset class handles the encoding and decoding of the - * ISO 8859-8 charset. Although the JRE includes an implementation of this - * charset, it does not recognize two aliases for this charset: - * ISO-8859-8-i and ISO-8859-8-e. These signify whether bidirectionality - * is implicit or explicit. However, this is the displayer's responsibility - * in any case, and the character conversion is the same. - * See RFC 1556. - * - * @author Amichai Rothman - * @since 2005-06-30 - */ -public class ISO88598Charset extends ByteLookupCharset { - - static final String NAME = "ISO-8859-8-BIDI"; - - static final String[] ALIASES = { - "csISO88598I", "ISO-8859-8-I", "ISO_8859-8-I", - "csISO88598E", "ISO-8859-8-E", "ISO_8859-8-E" }; - - static final int[] BYTE_TO_CHAR = { - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, - 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, - 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, - 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, - 0x00a0, -1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, - 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x203e, // 0x00af or 0x203e? - 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, - 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 0x2017, - 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, - 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, - 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, - 0x05e8, 0x05e9, 0x05ea, -1, -1, 0x200e, 0x200f, -1, // 0x200e/0x200f added to spec - }; - - static { - // update the mapping for the MACRON character - // (see http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4760496). - // apply the fix only if we're running in JDK 1.5 or higher, - // so that we remain consistent with the JDK ISO-8859-8 charset - // implementation. - if (Utils.isJDK15()) - BYTE_TO_CHAR[0xaf] = 0x00af; - } - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO88598Charset. - */ - public ISO88598Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/KOI8UCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/KOI8UCharset.java deleted file mode 100644 index 2d53ae9..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/KOI8UCharset.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -/** - * The KOI8UCharset class handles the encoding and decoding of the - * KOI8-U charset, as provided in RFC 2319. - * - * @author Amichai Rothman - * @since 2005-08-02 - */ -public class KOI8UCharset extends ByteLookupCharset { - - static final String NAME = "KOI8-U"; - - static final String[] ALIASES = { "KOI8-RU", "KOI8_U" }; - - static final int[] BYTE_TO_CHAR = { - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f, - 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, - 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, - 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, - 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, - 0x2550, 0x2551, 0x2552, 0x0451, 0x0454, 0x2554, 0x0456, 0x0457, - 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x0491, 0x255D, 0x255E, - 0x255F, 0x2560, 0x2561, 0x0401, 0x0404, 0x2563, 0x0406, 0x0407, - 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x0490, 0x256C, 0x00A9, - 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, - 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, - 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, - 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, - 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, - 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, - 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, - 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A, - }; - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the KOI8UCharset. - */ - public KOI8UCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/KZ1048Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/KZ1048Charset.java deleted file mode 100644 index 03f1643..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/KZ1048Charset.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -/** - * The KZ1048Charset class handles the encoding and decoding of the - * KZ-1048 charset, created as Kazakhstan national standard STRK1048-2002 - * by modifying windows-1251, the Windows Cyrillic code page, with - * 16 modified mappings. It is registered in IANA as KZ-1048. - *

- * The encoding and decoding are based on the mapping at - * https://www.unicode.org/Public/MAPPINGS/VENDORS/MISC/KZ1048.TXT - * and https://www.iana.org/assignments/charset-reg/KZ-1048 - * - * @author Amichai Rothman - * @since 2019-03-31 - */ -public class KZ1048Charset extends ByteLookupCharset { - - static final String NAME = "KZ-1048"; - - static final String[] ALIASES = { "STRK1048-2002", "RK1048", "csKZ1048" }; - - static final int[] BYTE_TO_CHAR = { - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, - 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, - 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x049A, 0x04BA, 0x040F, - 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, - -1, 0x2122, 0x0459, 0x203A, 0x045A, 0x049B, 0x04BB, 0x045F, - 0x00A0, 0x04B0, 0x04B1, 0x04D8, 0x00A4, 0x04E8, 0x00A6, 0x00A7, - 0x0401, 0x00A9, 0x0492, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x04AE, - 0x00B0, 0x00B1, 0x0406, 0x0456, 0x04E9, 0x00B5, 0x00B6, 0x00B7, - 0x0451, 0x2116, 0x0493, 0x00BB, 0x04D9, 0x04A2, 0x04A3, 0x04AF, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, - }; - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the KZ1048Charset. - */ - public KZ1048Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/MIKCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/MIKCharset.java deleted file mode 100644 index b7dc51d..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/MIKCharset.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -/** - * The MIKCharset class handles the encoding and decoding of the - * MIK cyrillic code page, commonly used by DOS applications in Bulgaria. - * - * @author Amichai Rothman - * @since 2009-12-16 - */ -public class MIKCharset extends ByteLookupCharset { - - static final String NAME = "MIK"; - - static final String[] ALIASES = {}; - - static final int[] BYTE_TO_CHAR = { - 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, - 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, - 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, - 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, - 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, - 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, - 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, - 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, - 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, - 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, - 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, - 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, - 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, - 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, - 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, - 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x2563, 0x2551, - 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2510, - 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2116, 0x00A7, 0x2557, - 0x255D, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, - 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, - 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229, - 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, - 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0, - }; - - static final int[][] CHAR_TO_BYTE = // updated with ambiguous mappings - updateInverseLookupTable( - createInverseLookupTable(BYTE_TO_CHAR), - new int[] { 0x00DF, 0x2211, 0x00B5, 0x2126, 0x2205, 0x2208, - 0x03B2, 0x03A3, 0x03BC, 0x03A9, 0x03C6, 0x03B5 }, - new int[] { 0xE1, 0xE4, 0xE6, 0xEA, 0xED, 0xEE, - 0xE1, 0xE4, 0xE6, 0xEA, 0xED, 0xEE }); - - /** - * Constructs an instance of the MIKCharset. - */ - public MIKCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/UTF7Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/UTF7Charset.java deleted file mode 100644 index fe89d27..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/UTF7Charset.java +++ /dev/null @@ -1,482 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.*; - -/** - * The UTF7Charset class handles the encoding and decoding of the - * UTF-7 charset. - *

- * The encoding and decoding are based on RFC 2152 - * (http://www.ietf.org/rfc/rfc2152.txt) - * - * @author Amichai Rothman - * @since 2005-06-10 - */ -public class UTF7Charset extends Charset { - - static final String NAME = "UTF-7"; - - static final String[] ALIASES = { - "UTF7", "UNICODE-1-1-UTF-7", "csUnicode11UTF7", "UNICODE-2-0-UTF-7" }; - - // a lookup table for characters that are part of the D Set - static final boolean[] D_SET = { - false, false, false, false, false, false, false, false, - false, true, true, false, false, true, false, false, - false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, - true, false, false, false, false, false, false, true, - true, true, false, false, true, true, true, true, - true, true, true, true, true, true, true, true, - true, true, true, false, false, false, false, true, - false, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, - true, true, true, false, false, false, false, false, - false, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, - true, true, true, true, true, true, true, true, - true, true, true, false, false, false, false, false, - }; - - // a lookup table for characters that are part of the O Set - static final boolean[] O_SET = { - false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, - false, true, true, true, true, true, true, false, - false, false, true, false, false, false, false, false, - false, false, false, false, false, false, false, false, - false, false, false, true, true, true, true, false, - true, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, - false, false, false, true, false, true, true, true, - true, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, - false, false, false, false, false, false, false, false, - false, false, false, true, true, true, false, false, - }; - - // a lookup table for characters that are part of the B Set - static final int[] B_SET = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, - 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, - -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, - -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1, - }; - - // an inverse lookup table for characters that are part of the B Set - static final int[] B_SET_INVERSE = { - 65, 66, 67, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, - 81, 82, 83, 84, 85, 86, 87, 88, - 89, 90, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, - 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 48, 49, 50, 51, - 52, 53, 54, 55, 56, 57, 43, 47, - }; - - // the RFC specifies that the O-set characters may - // optionally be directly encoded. Whether they are - // encoded directly or using a shift sequence depends - // on the value of the optionalDirect flag. - final boolean optionalDirect; - - static boolean isDSet(byte b) { - return b >= 0 && D_SET[b]; - } - - static boolean isDSet(char c) { - return c < 0x80 && D_SET[c]; - } - - static boolean isOSet(byte b) { - return b >= 0 && O_SET[b]; - } - - static boolean isOSet(char c) { - return c < 0x80 && O_SET[c]; - } - - static boolean isDorOSet(byte b) { - return b >= 0 && (D_SET[b] || O_SET[b]); - } - - static boolean isDorOSet(char c) { - return c < 0x80 && (D_SET[c] || O_SET[c]); - } - - static boolean isBSet(byte b) { - return b >= 0 && B_SET[b] != -1; - } - - static boolean isBSet(char c) { - return c < 0x80 && B_SET[c] != -1; - } - - static byte fromBase64(byte b) { - return (byte)(b < 0 ? -1 : B_SET[b]); - } - - static byte toBase64(byte b) { - return (byte)(b < 0 || b >= 64 ? -1 : B_SET_INVERSE[b]); - } - - /** - * Constructs an instance of the UTF7Charset. - *

- * O-set characters are not directly encoded. - */ - public UTF7Charset() { - this(NAME, ALIASES, false); - } - - /** - * Constructs an instance of the UTF7Charset, specifying whether the - * O-set characters are to be encoded directly or using a shift sequence. - * - * @param canonicalName the canonical name of this charset - * @param aliases an array of this charset's aliases, or null if it has no aliases - * @param optionalDirect if true, O-set characters are encoded directly, - * otherwise they are encoded using a shift sequence - * @throws IllegalCharsetNameException - * if the canonical name or any of the aliases are illegal - */ - public UTF7Charset(String canonicalName, String[] aliases, boolean optionalDirect) { - super(canonicalName, aliases); - this.optionalDirect = optionalDirect; - } - - /** - * Returns whether the given character is encoded directly - * or using a shift sequence. - * - * @param c the character to check - * @return true if the character is encoded directly, - * false if it is encoded using a shift sequence - */ - boolean isDirect(char c) { - return c < 0x80 && (D_SET[c] || (optionalDirect && O_SET[c])); - } - - /** - * Tells whether or not this charset contains the given charset. - * - *

A charset C is said to contain a charset D if, - * and only if, every character representable in D is also - * representable in C. If this relationship holds then it is - * guaranteed that every string that can be encoded in D can also be - * encoded in C without performing any replacements. - * - *

That C contains D does not imply that each character - * representable in C by a particular byte sequence is represented - * in D by the same byte sequence, although sometimes this is the - * case. - * - *

Every charset contains itself. - * - *

This method computes an approximation of the containment relation: - * If it returns true then the given charset is known to be - * contained by this charset; if it returns false, however, then - * it is not necessarily the case that the given charset is not contained - * in this charset. - * - * @return true if, and only if, the given charset - * is contained in this charset - */ - @Override - public boolean contains(Charset charset) { - return getClass().isInstance(charset) || Charset.forName("UTF-16").contains(charset); - } - - /** - * Constructs a new decoder for this charset. - * - * @return a new decoder for this charset - */ - @Override - public CharsetDecoder newDecoder() { - return new Decoder(this); - } - - /** - * Constructs a new encoder for this charset. - * - * @return a new encoder for this charset - */ - @Override - public CharsetEncoder newEncoder() { - return new Encoder(this); - } - - /** - * The Encoder inner class handles the encoding of the UTF7 charset. - */ - protected class Encoder extends CharsetEncoder { - - boolean shifted; // flags whether we are currently in a shift sequence - char encodedChar; // holds the bits of previous partially encoded char - int requiredBits; // number of bits required to complete a 6-bit value - - /** - * Constructs an Encoder. - * - * @param charset the charset that created this encoder - */ - protected Encoder(Charset charset) { - super(charset, 1f, 5f); - } - - /** - * Resets this decoder, clearing any charset-specific internal state. - */ - @Override - protected void implReset() { - shifted = false; - } - - /** - * Flushes this encoder. - * - * @param out the output byte buffer - * @return a coder-result object, either {@link CoderResult#UNDERFLOW} or - * {@link CoderResult#OVERFLOW} - */ - @Override - protected CoderResult implFlush(ByteBuffer out) { - if (shifted) { - if (out.remaining() < 2) - return CoderResult.OVERFLOW; - flushBase64Char(out); - out.put((byte)'-'); // terminate shift sequence explicitly - } - return CoderResult.UNDERFLOW; - } - - /** - * Encodes one or more characters into one or more bytes. - * - * @param in the input character buffer - * @param out the output byte buffer - * @return a coder-result object describing the reason for termination - */ - @Override - protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) { - int remaining = in.remaining(); - - while (remaining-- > 0) { - // make sure we have output space (the max we might need) - if (out.remaining() < 3) - return CoderResult.OVERFLOW; - - // get next byte - char c = in.get(); - - // if not in shift sequence - if (!shifted) { - // if char is in set D, write it as byte directly - if (isDirect(c)) { - out.put((byte)c); - } else if (c == '+') { // specially encoded char - out.put((byte)'+').put((byte)'-'); - } else { // start shift sequence - out.put((byte)'+'); - shifted = true; - requiredBits = 6; - writeBase64Char(out, c); - } - } else { // shifted - if (isDirect(c)) { // direct char - // terminate shift sequence - shifted = false; - flushBase64Char(out); - if (isBSet(c) || c == '-') // requires explicit termination - out.put((byte)'-'); - // write direct char - out.put((byte)c); - } else { // another encoded char - writeBase64Char(out, c); - } - } - } - - return CoderResult.UNDERFLOW; - } - - /** - * Writes the base64 bytes representing the given character - * to the given output ByteBuffer. Bits left over from - * previously written characters are written first, followed - * by this character's bits. Similarly, bits left over from - * this character are saved until the next call to this method. - * - * @param out the ByteBuffer to which the base64 bytes are written - * @param c the character to be written - */ - void writeBase64Char(ByteBuffer out, char c) { - int bits = requiredBits; // getfield bytecode optimization - byte b = (byte)(((encodedChar << bits) & 0x3F) | (c >>> (16 - bits))); - out.put(toBase64(b)); - b = (byte)((c >>> (10 - bits)) & 0x3F); - out.put(toBase64(b)); - - if (bits != 6) { - b = (byte)((c >>> (4 - bits)) & 0x3F); - out.put(toBase64(b)); - requiredBits += 2; - } else { - requiredBits = 2; - } - encodedChar = c; - } - - /** - * Writes any left-over base64 bits. - * - * @param out the ByteBuffer to which the base64 bytes are written - */ - void flushBase64Char(ByteBuffer out) { - if (requiredBits != 6) { // dump last encoded byte, zero-bit padded - byte b = (byte)((encodedChar << requiredBits) & 0x3F); - out.put(toBase64(b)); - } - } - - } // Encoder class - - /** - * The Decoder inner class handles the decoding of the UTF7 charset. - */ - protected class Decoder extends CharsetDecoder { - - boolean shifted; // flags whether we are currently in a shift sequence - boolean emptyShift; // flags whether the current shift sequence is empty - char decodedChar; // holds the bits of previous partially decoded char - int requiredBits; // number of bits required to complete a 16-bit char - - /** - * Constructs a Decoder. - * - * @param charset the charset that created this decoder - */ - protected Decoder(Charset charset) { - super(charset, 1f, 1f); - } - - /** - * Resets this decoder, clearing any charset-specific internal state. - */ - @Override - protected void implReset() { - shifted = false; - } - - /** - * Decodes one or more bytes into one or more characters. - * - * @param in the input byte buffer - * @param out the output character buffer - * @return a coder-result object describing the reason for termination - */ - @Override - protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) { - int val; - int remaining = in.remaining(); - - while (remaining-- > 0) { - // make sure we have output space - if (out.remaining() < 1) - return CoderResult.OVERFLOW; - - // get next byte - byte b = in.get(); - - // if not in shift sequence - if (!shifted) { - // if byte is in set D or O, write it as char - if (isDorOSet(b)) { - out.put((char)b); - } else if (b == '+') { // start shift sequence - shifted = true; - emptyShift = true; - requiredBits = 16; - } else { // invalid byte - in.position(in.position() - 1); // position input at error byte - return CoderResult.malformedForLength(1); // invalid byte - } - } else if ((val = fromBase64(b)) != -1) { // valid base64 byte - // get bits from shift sequence byte - emptyShift = false; - // 6 is the max number of bits we can get from a single input byte - int bits = requiredBits >= 6 ? 6 : requiredBits; - // add new bits to currently decoded char - decodedChar = (char)((decodedChar << bits) | (val >> (6 - bits))); - requiredBits -= bits; - // check if we're done decoding a full 16-bit char - if (requiredBits == 0) { - // output it - out.put(decodedChar); - // and start off next char with remaining bits - requiredBits = 10 + bits; // 16 - (6 - bits) - decodedChar = (char)val; // save the extra bits for later - } - } else { // terminating a shift sequence - shifted = false; - // any leftover bits when terminating the shift sequence - // are discarded if they are zero, or invalid if they are nonzero - if ((char)(decodedChar << requiredBits) != 0) { - in.position(in.position() - 1); // position input at error byte - return CoderResult.malformedForLength(1); // invalid byte - } - // process implicit or explicit shift sequence termination - if (b == '-') { - if (emptyShift) // a "+-" sequence outputs a '+' - out.put('+'); - // otherwise shift ends, and '-' is absorbed - } else { - // process regular char that ended base64 sequence - if (isDorOSet(b)) { // output regular char - out.put((char)b); - } else { - in.position(in.position() - 1); // position input at error byte - return CoderResult.malformedForLength(1); // invalid byte - } - } - } - } - - return CoderResult.UNDERFLOW; - } - } // Decoder class - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/UTF7OptionalCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/UTF7OptionalCharset.java deleted file mode 100644 index d84e080..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/UTF7OptionalCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -/** - * The UTF7OptionalCharset class handles the encoding and decoding of the - * UTF-7 charset. - *

- * The O-Set characters are encoded directly - * (this is optional according to the RFC). - *

- * The encoding and decoding are based on RFC 2152 - * (http://www.ietf.org/rfc/rfc2152.txt) - * - * @author Amichai Rothman - * @since 2005-06-10 - */ -public class UTF7OptionalCharset extends UTF7Charset { - - static final String NAME = "UTF-7-OPTIONAL"; - - static final String[] ALIASES = { "UTF-7O", "UTF7O", "UTF-7-O" }; - - /** - * Constructs an instance of the UTF7OptionalCharset. - *

- * O-set characters are directly encoded. - */ - public UTF7OptionalCharset() { - super(NAME, ALIASES, true); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/Utils.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/Utils.java deleted file mode 100644 index 5e9727c..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/Utils.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset; - -import java.io.*; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.List; - -/** - * The Utils class contains utility methods used at runtime - * by charsets, as well as development tools for creating new Charsets. - * - * @author Amichai Rothman - * @since 2015-10-14 - */ -public class Utils { - - // prevents instantiation - private Utils() {} - - /** - * Returns whether the running JDK version is at least 1.5. - * - * @return true if running in JDK 1.5 or higher, false otherwise - */ - static boolean isJDK15() { - try { - float version = Float.parseFloat(System.getProperty("java.class.version")); - return version >= 49.0; // 49.0 is the class version of JDK 1.5 - } catch (Exception e) { - return false; - } - } - - /** - * Returns a string containing the Java definitions of the - * given inverse lookup (char-to-byte) table. - *

- * This is a convenient utility method for design-time building - * of charsets based on a lookup table mapping, as an alternative - * to creating these inverse lookup tables on-the-fly. - * - * @param tables the inverse lookup (char-to-byte) table - * @return the Java definitions of the inverse lookup - * (char-to-byte) table - */ - public static String toInverseLookupTableDefinition(int[][] tables) { - StringBuilder sb = new StringBuilder(); - int nulls = 0; - sb.append("static final int[][] CHAR_TO_BYTE = {\n\t"); - for (int i = 0; i < tables.length; i++) { - int[] table = tables[i]; - if (table == null) { - if (nulls++ % 8 == 0 && nulls > 1) - sb.append("\n\t"); - sb.append("null, "); - } else { - if (nulls > 0) - sb.append("\n\t"); - nulls = 0; - sb.append("{ // high byte = 0x"); - if (i < 0x10) - sb.append('0'); - sb.append(Integer.toHexString(i)); - sb.append("\n\t"); - for (int j = 0; j < table.length; j++) { - if (table[j] == -1) { - sb.append(" -1, "); - } else { - sb.append("0x"); - if (table[j] < 0x10) - sb.append('0'); - sb.append(Integer.toHexString(table[j])).append(", "); - } - if ((j + 1) % 8 == 0) - sb.append("\n\t"); - } - sb.append("}, \n\t"); - } - } - sb.append("\n\t};"); - return sb.toString(); - } - - /** - * Main entry point for command-line utility. - * - * @param args the command line arguments - * @throws IOException if an error occurs - */ - public static void main(String[] args) throws IOException { - // parse arguments - String from = "UTF-8"; - String to = "UTF-8"; - List inputFiles = new ArrayList(); - String outputFile = null; - PrintStream so = System.out; - try { - for (int i = 0; i < args.length; i++) { - String arg = args[i]; - if (arg.startsWith("-") && arg.length() > 1 && inputFiles.isEmpty()) { - if (arg.equals("-o")) { - outputFile = args[++i]; // throws IOOBE - } else if (arg.equals("-f")) { - from = args[++i]; // throws IOOBE - } else if (arg.equals("-t")) { - to = args[++i]; // throws IOOBE - } else if (arg.equals("-l") || arg.equals("-ll")) { - String filter = arg.equals("-ll") ? Utils.class.getPackage().getName() : ""; - for (Charset charset : Charset.availableCharsets().values()) - if (charset.getClass().getName().startsWith(filter)) - so.println(charset.name() + " " + charset.aliases()); - System.exit(0); - } else if (arg.equals("-?") || arg.equals("-h")) { - so.println("Usage: java -jar jcharset.jar [options] [inputFiles...]\n"); - so.println("Converts the charset encoding of one or more (concatenated) input files."); - so.println("If no files or '-' (dash) is specified, input is read from stdin."); - so.println("\nOptions:"); - so.println(" -f \tthe name of the input charset [default UTF-8]"); - so.println(" -t \tthe name of the output charset [default UTF-8]"); - so.println(" -o \tthe output file name [default stdout]"); - so.println(" -l\t\t\tlist all available charset names and aliases"); - so.println(" -ll\t\t\tlist all JCharset charset names and aliases"); - so.println(" -h, -?\t\tshow this help information"); - System.exit(1); - } else { - throw new IndexOutOfBoundsException(); - } - } else { - inputFiles.add(arg); // all remaining args are input files - } - } - } catch (IndexOutOfBoundsException ioobe) { - System.err.println("Error: invalid argument"); - System.err.println("Use the -h option for help"); - System.exit(2); - } - if (inputFiles.isEmpty()) - inputFiles.add("-"); - // perform conversion - OutputStream os = outputFile == null ? so : new FileOutputStream(outputFile); - OutputStreamWriter writer = null; - try { - char[] buf = new char[16384]; - writer = new OutputStreamWriter(os, to); - for (String inputFile : inputFiles) { - InputStream is = inputFile.equals("-") ? System.in : new FileInputStream(inputFile); - try { - int count; - Reader reader = new InputStreamReader(is, from); - while ((count = reader.read(buf)) > -1) - writer.write(buf, 0, count); - } finally { - is.close(); - } - } - } finally { - if (writer != null) - writer.close(); // also flushes encoder - os.close(); - } - } -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CCGSMCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CCGSMCharset.java deleted file mode 100644 index dc89c80..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CCGSMCharset.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.gsm; - -/** - * The CCGSMCharset class handles the encoding and decoding of the - * GSM default encoding charset. In this variant, byte 0x09 is mapped - * to the LATIN CAPITAL LETTER C WITH CEDILLA character. - *

- * The encoding and decoding are based on the mapping at - * http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - * - * @author Amichai Rothman - * @since 2007-03-26 - */ -public class CCGSMCharset extends GSMCharset { - - static final String NAME = "CCGSM"; - - static final String[] ALIASES = {}; - - /** - * Constructs an instance of the CCGSMCharset. - */ - public CCGSMCharset() { - super(NAME, ALIASES, - BYTE_TO_CHAR_CAPITAL_C_CEDILLA, BYTE_TO_CHAR_ESCAPED_DEFAULT, - CHAR_TO_BYTE_CAPITAL_C_CEDILLA, CHAR_TO_BYTE_ESCAPED_DEFAULT); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CCPackedGSMCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CCPackedGSMCharset.java deleted file mode 100644 index 5cebdfb..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CCPackedGSMCharset.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.gsm; - -/** - * The CCPackedGSMCharset class handles the encoding and decoding of the - * GSM default encoding charset. In this variant, byte 0x09 is mapped - * to the LATIN CAPITAL LETTER C WITH CEDILLA character. - *

- * The encoding and decoding are based on the mapping at - * http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - * - * @author Amichai Rothman - * @since 2007-03-26 - */ -public class CCPackedGSMCharset extends PackedGSMCharset { - - static final String NAME = "CCPGSM"; - - static final String[] ALIASES = {}; - - /** - * Constructs an instance of the CCPackedGSMCharset. - */ - public CCPackedGSMCharset() { - super(NAME, ALIASES, - BYTE_TO_CHAR_CAPITAL_C_CEDILLA, BYTE_TO_CHAR_ESCAPED_DEFAULT, - CHAR_TO_BYTE_CAPITAL_C_CEDILLA, CHAR_TO_BYTE_ESCAPED_DEFAULT, - false); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CRCCPackedGSMCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CRCCPackedGSMCharset.java deleted file mode 100644 index 0f8bd19..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CRCCPackedGSMCharset.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.gsm; - -/** - * The CRCCPackedGSMCharset class handles the encoding and decoding of the - * GSM default encoding charset. In this variant, byte 0x09 is mapped - * to the LATIN CAPITAL LETTER C WITH CEDILLA character. - * It also uses {@link PackedGSMCharset CR-padding} instead of - * zero-padding to avoid ambiguous interpretation of an '@' character. - *

- * The encoding and decoding are based on the mapping at - * http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - * - * @author Amichai Rothman - * @since 2019-03-31 - */ -public class CRCCPackedGSMCharset extends PackedGSMCharset { - - static final String NAME = "CRCCPGSM"; - - static final String[] ALIASES = {}; - - /** - * Constructs an instance of the CRCCPackedGSMCharset. - */ - public CRCCPackedGSMCharset() { - super(NAME, ALIASES, - BYTE_TO_CHAR_CAPITAL_C_CEDILLA, BYTE_TO_CHAR_ESCAPED_DEFAULT, - CHAR_TO_BYTE_CAPITAL_C_CEDILLA, CHAR_TO_BYTE_ESCAPED_DEFAULT, - true); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CRSCPackedGSMCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CRSCPackedGSMCharset.java deleted file mode 100644 index b7205b8..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/CRSCPackedGSMCharset.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.gsm; - -/** - * The CRSCPackedGSMCharset class handles the encoding and decoding of the - * GSM default encoding charset. In this variant, byte 0x09 is mapped - * to the LATIN SMALL LETTER C WITH CEDILLA character. - * It also uses {@link PackedGSMCharset CR-padding} instead of - * zero-padding to avoid ambiguous interpretation of an '@' character. - *

- * The encoding and decoding are based on the mapping at - * http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - * - * @author Amichai Rothman - * @since 2019-03-31 - */ -public class CRSCPackedGSMCharset extends PackedGSMCharset { - - static final String NAME = "CRSCPGSM"; - - static final String[] ALIASES = {}; - - /** - * Constructs an instance of the CRSCPackedGSMCharset. - */ - public CRSCPackedGSMCharset() { - super(NAME, ALIASES, - BYTE_TO_CHAR_SMALL_C_CEDILLA, BYTE_TO_CHAR_ESCAPED_DEFAULT, - CHAR_TO_BYTE_SMALL_C_CEDILLA, CHAR_TO_BYTE_ESCAPED_DEFAULT, - true); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/GSMCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/GSMCharset.java deleted file mode 100644 index 04957e2..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/GSMCharset.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.gsm; - -import static net.freeutils.charset.ByteLookupCharset.createInverseLookupTable; -import static net.freeutils.charset.ByteLookupCharset.mutate; -import net.freeutils.charset.EscapedByteLookupCharset; - -/** - * The GSMCharset class handles the encoding and decoding of the - * GSM default encoding charset. - *

- * The encoding and decoding are based on the mapping at - * http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - * - * @author Amichai Rothman - * @since 2005-05-26 - */ -public class GSMCharset extends EscapedByteLookupCharset { - - static final byte ESCAPE = 0x1B; - - static final int[] BYTE_TO_CHAR_SMALL_C_CEDILLA = { - 0x0040, 0x00A3, 0x0024, 0x00A5, 0x00E8, 0x00E9, 0x00F9, 0x00EC, - 0x00F2, 0x00E7, 0x000A, 0x00D8, 0x00F8, 0x000D, 0x00C5, 0x00E5, - 0x0394, 0x005F, 0x03A6, 0x0393, 0x039B, 0x03A9, 0x03A0, 0x03A8, - 0x03A3, 0x0398, 0x039E, -1, 0x00C6, 0x00E6, 0x00DF, 0x00C9, - 0x0020, 0x0021, 0x0022, 0x0023, 0x00A4, 0x0025, 0x0026, 0x0027, - 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, - 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, - 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, - 0x00A1, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, - 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, - 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, - 0x0058, 0x0059, 0x005A, 0x00C4, 0x00D6, 0x00D1, 0x00DC, 0x00A7, - 0x00BF, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, - 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, - 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, - 0x0078, 0x0079, 0x007A, 0x00E4, 0x00F6, 0x00F1, 0x00FC, 0x00E0, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - }; - - static final int[] BYTE_TO_CHAR_ESCAPED_DEFAULT = { - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 0x000C, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 0x005E, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - 0x007B, 0x007D, -1, -1, -1, -1, -1, 0x005C, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 0x005B, 0x007E, 0x005D, -1, - 0x007C, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0x20AC, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, - }; - - static final int[][] CHAR_TO_BYTE_SMALL_C_CEDILLA = - createInverseLookupTable(BYTE_TO_CHAR_SMALL_C_CEDILLA); - - static final int[][] CHAR_TO_BYTE_ESCAPED_DEFAULT = - createInverseLookupTable(BYTE_TO_CHAR_ESCAPED_DEFAULT); - - static final int[] BYTE_TO_CHAR_CAPITAL_C_CEDILLA = - mutate(BYTE_TO_CHAR_SMALL_C_CEDILLA, new int[] { 9 }, new int[] { 0x00C7 }); - - static final int[][] CHAR_TO_BYTE_CAPITAL_C_CEDILLA = - createInverseLookupTable(BYTE_TO_CHAR_CAPITAL_C_CEDILLA); - - /** - * Initializes a new charset with the given canonical name and alias - * set, and byte-to-char/char-to-byte lookup tables. - * - * @param canonicalName the canonical name of this charset - * @param aliases an array of this charset's aliases, or null if it has no aliases - * @param byteToChar a byte-to-char conversion table for this charset - * @param byteToCharEscaped a byte-to-char conversion table for this charset - * for the escaped characters - * @param charToByte a char-to-byte conversion table for this charset. It can - * be generated on-the-fly by calling createInverseLookupTable(byteToChar). - * @param charToByteEscaped a char-to-byte conversion table for this charset - * for the escaped characters - * @throws java.nio.charset.IllegalCharsetNameException - * if the canonical name or any of the aliases are illegal - */ - protected GSMCharset(String canonicalName, String[] aliases, - int[] byteToChar, int[] byteToCharEscaped, - int[][] charToByte, int[][] charToByteEscaped) { - super(canonicalName, aliases, ESCAPE, - byteToChar, byteToCharEscaped, charToByte, charToByteEscaped); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/PackedGSMCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/PackedGSMCharset.java deleted file mode 100644 index d6e1a8c..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/PackedGSMCharset.java +++ /dev/null @@ -1,463 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.gsm; - -import java.nio.ByteBuffer; -import java.nio.CharBuffer; -import java.nio.charset.Charset; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CharsetEncoder; -import java.nio.charset.CoderResult; - -/** - * The PackedGSMCharset class handles the encoding and decoding of the - * GSM default encoding charset, with packing as per GSM 03.38 / ETSI TS 123 038 spec. - *

- * When there are 8*n-1 encoded bytes, there is ambiguity - * since it's impossible to distinguish whether the final byte - * contains a trailing '@' character (which is mapped to 0) - * or 7 zero bits of padding following 7 data bytes. - *

- * When decoding, we opt for the latter interpretation - * since it's far more likely, at the cost of losing a - * trailing '@' character in strings whose unpacked size - * is a multiple of 8, and whose last character is '@'. - *

- * An application that wishes to handle this rare case - * properly must disambiguate this case externally, such - * as by obtaining the original string length, and - * appending the trailing '@' if the length - * shows that there is one character missing. - *

- * Alternatively, the spec supports replacing the zero - * padding in such a case with a CR character, which is - * then removed by the receiver, but is harmless also on - * devices that display it as-is since a CR is invisible. - * This implementation has configurable support for CR padding. - *

- * However, this CR padding introduces a new ambiguity, with - * a string that really does end with a CR character on an - * 8-byte boundary, so in this case an extra CR is appended - * to it, and due to the semantics of CR in the spec, a double - * CR is equivalent to a single CR, so this is harmless as well. - *

- * The encoding and decoding are based on the mapping at - * http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - * - * @author Amichai Rothman - * @since 2007-03-20 - */ -public class PackedGSMCharset extends GSMCharset { - - static final int BUFFER_SIZE = 256; - static final byte CR = 0x0D; - - /** - * Specifies whether to use CR padding instead of zero padding - * when encoding/decoding in order to disambiguate the 7 padding - * zero bits in strings whose length is 8*n-1 bytes from a - * trailing '@' character in strings of length 8*n. - */ - final boolean padWithCR; - - /** - * Initializes a new charset with the given canonical name and alias - * set, and byte-to-char/char-to-byte lookup tables. - * - * @param canonicalName the canonical name of this charset - * @param aliases an array of this charset's aliases, or null if it has no aliases - * @param byteToChar a byte-to-char conversion table for this charset - * @param byteToCharEscaped a byte-to-char conversion table for this charset - * for the escaped characters - * @param charToByte a char-to-byte conversion table for this charset. It can - * be generated on-the-fly by calling createInverseLookupTable(byteToChar). - * @param charToByteEscaped a char-to-byte conversion table for this charset - * for the escaped characters - * @param padWithCR specifies whether to apply {@link PackedGSMCharset CR padding} - * or the original (but ambiguous) zero padding - * @throws java.nio.charset.IllegalCharsetNameException - * if the canonical name or any of the aliases are illegal - */ - protected PackedGSMCharset(String canonicalName, String[] aliases, - int[] byteToChar, int[] byteToCharEscaped, - int[][] charToByte, int[][] charToByteEscaped, - boolean padWithCR) { - super(canonicalName, aliases, - byteToChar, byteToCharEscaped, charToByte, charToByteEscaped); - this.padWithCR = padWithCR; - } - - /** - * Constructs a new decoder for this charset. - * - * @return a new decoder for this charset - */ - @Override - public CharsetDecoder newDecoder() { - return new Decoder(this); - } - - /** - * Constructs a new encoder for this charset. - * - * @return a new encoder for this charset - */ - @Override - public CharsetEncoder newEncoder() { - return new Encoder(this); - } - - /** - * The Encoder inner class handles the encoding of the - * Packed GSM default encoding charset. - */ - protected class Encoder extends GSMCharset.Encoder { - - int bitpos; - byte current; - ByteBuffer buf; - - /** - * Constructs an Encoder. - * - * @param charset the charset that created this encoder - */ - protected Encoder(Charset charset) { - super(charset, 7 / 8f, 2f); - buf = ByteBuffer.allocate(BUFFER_SIZE); - implReset(); - } - - /** - * Resets this encoder, clearing any charset-specific internal state. - */ - @Override - protected void implReset() { - bitpos = 0; - current = 0; - buf.limit(0); - } - - /** - * Flushes this encoder. - * - * @param out the output byte buffer - * - * @return a coder-result object, either {@link CoderResult#UNDERFLOW} or - * {@link CoderResult#OVERFLOW} - */ - @Override - protected CoderResult implFlush(ByteBuffer out) { - // flush buffer - CoderResult result = pack(buf, out); - // handle CR padding if necessary - if (padWithCR && bitpos <= 1) { // bitpos is 0 or 1 - if (bitpos == 1) { - // if the output is 8*n-1 bytes long, the last byte has 7 padding zero - // bits which may be ambiguously interpreted as an '@' character, - // so in this case we replace the padding with a harmless CR - current |= (CR << 1); - } else if (out.position() > 0 && out.get(out.position() - 1) >>> 1 == CR) { - // if the output is 8*n bytes long and really does end with a CR, - // we need to disambiguate this from the CR padding, - // so we add an extra CR (due to the spec's definition of CR, - // this is equivalent to a single CR and thus also harmless) - current = CR; - bitpos = 7; - } - } - // flush last (current) partial byte if it exists - if (bitpos != 0) { - if (!out.hasRemaining()) - return CoderResult.OVERFLOW; - out.put(current); // write final leftover byte - } - return result; - } - - /** - * Encodes one or more characters into one or more bytes. - * - * @param in the input character buffer - * @param out the output byte buffer - * @return a coder-result object describing the reason for termination - */ - @Override - protected CoderResult encodeLoop(CharBuffer in, ByteBuffer out) { - CoderResult result; - while (true) { - // output buffered data - if (buf.hasRemaining()) { - result = pack(buf, out); - if (result == CoderResult.OVERFLOW) - return result; - } - // process new data into buffer - buf.clear(); - result = super.encodeLoop(in, buf); - buf.flip(); - // stop if out of input or error - if (!buf.hasRemaining() || result.isError()) - return result; - } - } - - /** - * Packs the given data into full bytes. - * - * @param in the input byte buffer - * @param out the output byte buffer - * @return a coder-result object, either {@link CoderResult#UNDERFLOW} or - * {@link CoderResult#OVERFLOW} - */ - protected CoderResult pack(ByteBuffer in, ByteBuffer out) { - int remaining = in.remaining(); - while (remaining-- > 0) { - if (!out.hasRemaining()) - return CoderResult.OVERFLOW; - byte b = (byte)(in.get() & 0x7F); // remove top bit - // assign first group of partial bits - current |= b << bitpos; - // assign second group of partial bits (if exist) - if (bitpos > 0) { // if packed byte is full - out.put(current); - current = (byte)(b >> (8 - bitpos)); // keep left-over bits (if any) - } - bitpos = (bitpos + 7) % 8; - } - return CoderResult.UNDERFLOW; - } - - } - - /** - * The Decoder inner class handles the decoding of the - * Packed GSM default encoding charset. - */ - protected class Decoder extends GSMCharset.Decoder { - - int bitpos; - byte current; - byte prev; - int unpackedCount; - ByteBuffer buf; - - /** - * Constructs a Decoder. - * - * @param charset the charset that created this decoder - */ - protected Decoder(Charset charset) { - super(charset, 8 / 7f, 2f); - buf = ByteBuffer.allocate(BUFFER_SIZE); - implReset(); - } - - /** - * Resets this decoder, clearing any charset-specific internal state. - */ - @Override - protected void implReset() { - bitpos = 0; - current = 0; - prev = 0; - unpackedCount = 0; - buf.limit(0); - } - - /** - * Flushes this decoder. - * - * @param out the output character buffer - * - * @return a coder-result object, either {@link CoderResult#UNDERFLOW} or - * {@link CoderResult#OVERFLOW} - */ - @Override - protected CoderResult implFlush(CharBuffer out) { - // fix output edge cases caused by ambiguous padding, - // depending on the CR padding configuration: - // either remove a trailing '@' character if the string length is 8*n, - // or remove a trailing CR character if the string length is 8*n - // or if the string length is 8*n+1 and it ends with two CR characters - int mod = unpackedCount % 8; - if (mod <= 1) { // mod is 0 or 1 - int pos = out.position() - 1; - if (pos > 0) { - char c = out.get(pos); - if (c == '@' && !padWithCR && mod == 0 || - c == CR && padWithCR && (mod == 0 || out.get(pos - 1) == CR)) - out.position(pos); // remove last character - } - } - return CoderResult.UNDERFLOW; - } - - /** - * Decodes one or more bytes into one or more characters. - * - * @param in the input byte buffer - * @param out the output character buffer - * @return a coder-result object describing the reason for termination - */ - @Override - protected CoderResult decodeLoop(ByteBuffer in, CharBuffer out) { - while (true) { - // unpack input data into buffer - unpackedCount -= buf.remaining(); // it will be counted again after unpack - buf.compact(); // move data to beginning and prepare to write more - CoderResult unpackResult = unpack(in, buf); - buf.flip(); // prepare to read - if (!buf.hasRemaining()) - return unpackResult; // underflow - unpackedCount += buf.remaining(); - // decode buffered unpacked data to output - CoderResult decodeResult = super.decodeLoop(buf, out); - // handle out of output space and buffer still has data in it - if (buf.hasRemaining() || decodeResult.isError()) { - if (decodeResult.isUnderflow()) { // last byte is escape byte - // if there's more input or at least another unpacked byte - // (the 8th doesn't require reading from input), just continue - if (in.hasRemaining() || unpackResult.isOverflow()) - continue; - // otherwise we really need more input, so undo the last byte - // (escape sequence which was cut in middle) so caller can - // properly handle malformed input if there is no more input - in.position(in.position() - 1); // unread the byte - bitpos = (bitpos + 9) % 8; // undo its unpacking too - current = prev; - buf.limit(buf.position()); - unpackedCount--; - } - return decodeResult; - } - } - } - - /** - * Unpacks the given data into original bytes. - * - * @param in the input byte buffer - * @param out the output byte buffer - * @return a coder-result object, either {@link CoderResult#UNDERFLOW} or - * {@link CoderResult#OVERFLOW} - */ - protected CoderResult unpack(ByteBuffer in, ByteBuffer out) { - int remaining = out.remaining(); - while (remaining-- > 0) { - if (!in.hasRemaining() && bitpos != 1) - return CoderResult.UNDERFLOW; - if (bitpos == 0) { - prev = current; - current = in.get(); - } - // remove top bit and assign first group of partial bits - byte b = (byte)(((current & 0xFF) >> bitpos) & 0x7F); - // remove top bit and assign second group of partial bits (if exist) - if (bitpos >= 2) { - prev = current; - current = in.get(); - b |= (byte)((current << (8 - bitpos)) & 0x7F); - } - bitpos = (bitpos + 7) % 8; - out.put(b); - } - return CoderResult.OVERFLOW; - } - } - - /** - * Unpacks the given data into original bytes. - *

- * This is an external utility method and is not used - * internally by the Charset implementation. - * - * @param in the input bytes - * @return the unpacked output bytes - */ - public static byte[] unpack(byte[] in) { - byte[] out = new byte[(in.length * 8) / 7]; - int len = out.length; - int current = 0; - int bitpos = 0; - for (int i = 0; i < len; i++) { - // remove top bit and assign first group of partial bits - out[i] = (byte)(((in[current] & 0xFF) >> bitpos) & 0x7F); - // remove top bit and assign second group of partial bits (if exist) - if (bitpos > 1) - out[i] |= (byte)((in[++current] << (8 - bitpos)) & 0x7F); - else if (bitpos == 1) - current++; - bitpos = (bitpos + 7) % 8; - } - // this fixes an ambiguity bug in the specs - // where the last of 8 packed bytes is 0 - // and it's impossible to distinguish whether it is a - // trailing '@' character (which is mapped to 0) - // or extra zero-bit padding for 7 actual data bytes. - // - // we opt for the latter, since it's far more likely, - // at the cost of losing a trailing '@' character - // in strings whose unpacked size modulo 8 is 0, - // and whose last character is '@'. - // - // an application that wishes to handle this rare case - // properly must disambiguate this case externally, such - // as by obtaining the original string length, and - // appending the trailing '@' if the length - // shows that there is one character missing. - if (len % 8 == 0 && len > 0 && out[len - 1] == 0) { - byte[] fixed = new byte[len - 1]; - System.arraycopy(out, 0, fixed, 0, len - 1); - out = fixed; - } - return out; - } - - /** - * Packs the given data into full bytes. - *

- * This is an external utility method and is not used - * internally by the Charset implementation. - * - * @param in the input bytes - * @return the packed output bytes - */ - public static byte[] pack(byte[] in) { - byte[] out = new byte[(int)Math.ceil((in.length * 7) / 8f)]; - int current = 0; - int bitpos = 0; - for (byte b : in) { - b &= 0x7F; // remove top bit - // assign first group of partial bits - out[current] |= b << bitpos; - // assign second group of partial bits (if exist) - if (bitpos > 1) - out[++current] |= b >> 8 - bitpos; - else if (bitpos == 1) // packed byte is full (but no left-over bits) - current++; - bitpos = (bitpos + 7) % 8; - } - return out; - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/SCGSMCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/SCGSMCharset.java deleted file mode 100644 index efc534d..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/SCGSMCharset.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.gsm; - -/** - * The SCGSMCharset class handles the encoding and decoding of the - * GSM default encoding charset. In this variant, byte 0x09 is mapped - * to the LATIN SMALL LETTER C WITH CEDILLA character. - *

- * The encoding and decoding are based on the mapping at - * http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - * - * @author Amichai Rothman - * @since 2007-03-26 - */ -public class SCGSMCharset extends GSMCharset { - - static final String NAME = "SCGSM"; - - static final String[] ALIASES = { - "GSM-DEFAULT-ALPHABET", "GSM_0338", "GSM_DEFAULT", "GSM7", "GSM-7BIT" }; - - /** - * Constructs an instance of the SCGSMCharset. - */ - public SCGSMCharset() { - super(NAME, ALIASES, - BYTE_TO_CHAR_SMALL_C_CEDILLA, BYTE_TO_CHAR_ESCAPED_DEFAULT, - CHAR_TO_BYTE_SMALL_C_CEDILLA, CHAR_TO_BYTE_ESCAPED_DEFAULT); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/SCPackedGSMCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/SCPackedGSMCharset.java deleted file mode 100644 index 2f94a87..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/gsm/SCPackedGSMCharset.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.gsm; - -/** - * The SCPackedGSMCharset class handles the encoding and decoding of the - * GSM default encoding charset. In this variant, byte 0x09 is mapped - * to the LATIN SMALL LETTER C WITH CEDILLA character. - *

- * The encoding and decoding are based on the mapping at - * http://www.unicode.org/Public/MAPPINGS/ETSI/GSM0338.TXT - * - * @author Amichai Rothman - * @since 2007-03-26 - */ -public class SCPackedGSMCharset extends PackedGSMCharset { - - static final String NAME = "SCPGSM"; - - static final String[] ALIASES = {}; - - /** - * Constructs an instance of the SCPackedGSMCharset. - */ - public SCPackedGSMCharset() { - super(NAME, ALIASES, - BYTE_TO_CHAR_SMALL_C_CEDILLA, BYTE_TO_CHAR_ESCAPED_DEFAULT, - CHAR_TO_BYTE_SMALL_C_CEDILLA, CHAR_TO_BYTE_ESCAPED_DEFAULT, - false); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CA2Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CA2Charset.java deleted file mode 100644 index e119b91..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CA2Charset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646CA2Charset class handles the encoding and decoding of the - * ISO646-CA2 national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646CA2Charset extends ByteLookupCharset { - - static final String NAME = "ISO646-CA2"; - - static final String[] ALIASES = { "ISO-IR-122" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xE0, 0xE2, 0xE7, 0xEA, 0xC9, 0xF4, 0xE9, 0xF9, 0xE8, 0xFB }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646CA2Charset. - */ - public ISO646CA2Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CACharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CACharset.java deleted file mode 100644 index 89a3e5e..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CACharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646CACharset class handles the encoding and decoding of the - * ISO646-CA national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646CACharset extends ByteLookupCharset { - - static final String NAME = "ISO646-CA"; - - static final String[] ALIASES = { "ISO-IR-121" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xE0, 0xE2, 0xE7, 0xEA, 0xEE, 0xF4, 0xE9, 0xF9, 0xE8, 0xFB }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646CACharset. - */ - public ISO646CACharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CHCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CHCharset.java deleted file mode 100644 index 7f9e2ed..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CHCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646CHCharset class handles the encoding and decoding of the - * ISO646-CH national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646CHCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-CH"; - - static final String[] ALIASES = {}; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xF9, 0xE0, 0xE9, 0xE7, 0xEA, 0xEE, 0xE8, 0xF4, 0xE4, 0xF6, 0xFC, 0xFB }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646CHCharset. - */ - public ISO646CHCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CNCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CNCharset.java deleted file mode 100644 index b7b07ef..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CNCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646CNCharset class handles the encoding and decoding of the - * ISO646-CN national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646CNCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-CN"; - - static final String[] ALIASES = { "ISO-IR-57" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x24, 0x7E }, - new int[] { 0xA5, 0xAF }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646CNCharset. - */ - public ISO646CNCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CUCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CUCharset.java deleted file mode 100644 index 8d1357b..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646CUCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646CUCharset class handles the encoding and decoding of the - * ISO646-CU national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646CUCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-CU"; - - static final String[] ALIASES = { "ISO-IR-151" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x24, 0x5B, 0x5C, 0x5E, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA4, 0xA1, 0xD1, 0xBF, 0xB4, 0xF1, 0x5B, 0xA8 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646CUCharset. - */ - public ISO646CUCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646DECharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646DECharset.java deleted file mode 100644 index 439a560..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646DECharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646DECharset class handles the encoding and decoding of the - * ISO646-DE national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646DECharset extends ByteLookupCharset { - - static final String NAME = "ISO646-DE"; - - static final String[] ALIASES = { "ISO-IR-21", "DIN_66003" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x40, 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA7, 0xC4, 0xD6, 0xDC, 0xE4, 0xF6, 0xFC, 0xDF }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646DECharset. - */ - public ISO646DECharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646DKCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646DKCharset.java deleted file mode 100644 index e89aa76..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646DKCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646DKCharset class handles the encoding and decoding of the - * ISO646-DK national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646DKCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-DK"; - - static final String[] ALIASES = {}; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D }, - new int[] { 0xC6, 0xD8, 0xC5, 0xE6, 0xF8, 0xE5 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646DKCharset. - */ - public ISO646DKCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ES2Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ES2Charset.java deleted file mode 100644 index 24c2ec5..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ES2Charset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646ES2Charset class handles the encoding and decoding of the - * ISO646-ES2 national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646ES2Charset extends ByteLookupCharset { - - static final String NAME = "ISO646-ES2"; - - static final String[] ALIASES = { "ISO-IR-85" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0x2022, 0xA1, 0xD1, 0xC7, 0xBF, 0xB4, 0xF1, 0xE7, 0xA8 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646ES2Charset. - */ - public ISO646ES2Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ESCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ESCharset.java deleted file mode 100644 index 0772d18..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ESCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646ESCharset class handles the encoding and decoding of the - * ISO646-ES national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646ESCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-ES"; - - static final String[] ALIASES = { "ISO-IR-17" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x40, 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D }, - new int[] { 0xA3, 0xA7, 0xA1, 0xD1, 0xBF, 0xB0, 0xF1, 0xE7 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646ESCharset. - */ - public ISO646ESCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FISECharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FISECharset.java deleted file mode 100644 index 862560b..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FISECharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646FISECharset class handles the encoding and decoding of the - * ISO646-FI/ISO646-SE national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646FISECharset extends ByteLookupCharset { - - static final String NAME = "ISO646-FI"; - - static final String[] ALIASES = { "ISO646-SE", "ISO-IR-10" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x24, 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA4, 0xC4, 0xD6, 0xC5, 0xE4, 0xF6, 0xE5, 0xAF }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646FISECharset. - */ - public ISO646FISECharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FR1Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FR1Charset.java deleted file mode 100644 index cf5cbc4..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FR1Charset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646FR1Charset class handles the encoding and decoding of the - * ISO646-FR1 national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646FR1Charset extends ByteLookupCharset { - - static final String NAME = "ISO646-FR1"; - - static final String[] ALIASES = { "ISO-IR-25" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x40, 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA3, 0xE0, 0xB0, 0xE7, 0xA7, 0xE9, 0xF9, 0xE8, 0xA8 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646FR1Charset. - */ - public ISO646FR1Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FRCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FRCharset.java deleted file mode 100644 index 8656373..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646FRCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646FRCharset class handles the encoding and decoding of the - * ISO646-FR national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646FRCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-FR"; - - static final String[] ALIASES = { "ISO-IR-69" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x40, 0x5B, 0x5C, 0x5D, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA3, 0xE0, 0xB0, 0xE7, 0xA7, 0xB5, 0xE9, 0xF9, 0xE8, 0xA8 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646FRCharset. - */ - public ISO646FRCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646GBCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646GBCharset.java deleted file mode 100644 index 39516a8..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646GBCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646GBCharset class handles the encoding and decoding of the - * ISO646-GB national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646GBCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-GB"; - - static final String[] ALIASES = { "ISO-IR-4" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x7E }, - new int[] { 0xA3, 0xAF }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646GBCharset. - */ - public ISO646GBCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646HUCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646HUCharset.java deleted file mode 100644 index 986bc6c..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646HUCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646HUCharset class handles the encoding and decoding of the - * ISO646-HU national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646HUCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-HU"; - - static final String[] ALIASES = { "ISO-IR-86" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x24, 0x40, 0x5B, 0x5C, 0x5D, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA4, 0xC1, 0xC9, 0xD6, 0xDC, 0xE1, 0xE9, 0xF6, 0xFC, 0x02DD }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646HUCharset. - */ - public ISO646HUCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646IECharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646IECharset.java deleted file mode 100644 index 2f48713..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646IECharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646IECharset class handles the encoding and decoding of the - * ISO646-IE national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646IECharset extends ByteLookupCharset { - - static final String NAME = "ISO646-IE"; - - static final String[] ALIASES = { "ISO-IR-207" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA3, 0xD3, 0xC9, 0xCD, 0xDA, 0xC1, 0xF3, 0xE9, 0xED, 0xFA, 0xE1 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646IECharset. - */ - public ISO646IECharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646INVCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646INVCharset.java deleted file mode 100644 index 1f8e088..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646INVCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646INVCharset class handles the encoding and decoding of the - * ISO646-INV national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646INVCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-INV"; - - static final String[] ALIASES = { "ISO-IR-170" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x24, 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646USCharset. - */ - public ISO646INVCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646IRVCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646IRVCharset.java deleted file mode 100644 index 9f93d0b..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646IRVCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646IRVCharset class handles the encoding and decoding of the - * ISO646-IRV national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646IRVCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-IRV"; - - static final String[] ALIASES = { "ISO-IR-2", "ISO_646.IRV:1983" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x24 }, - new int[] { 0xA4 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646IRVCharset. - */ - public ISO646IRVCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ISCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ISCharset.java deleted file mode 100644 index 19cc052..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ISCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646ISCharset class handles the encoding and decoding of the - * ISO646-IS national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646ISCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-IS"; - - static final String[] ALIASES = {}; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x40, 0x5B, 0x5D, 0x5E, 0x60, 0x7B, 0x7D, 0x7E }, - new int[] { 0xD0, 0xDE, 0xC6, 0xD6, 0xF0, 0xFE, 0xE6, 0xF6 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646ISCharset. - */ - public ISO646ISCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ITCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ITCharset.java deleted file mode 100644 index 310b909..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646ITCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646ITCharset class handles the encoding and decoding of the - * ISO646-ita national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646ITCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-IT"; - - static final String[] ALIASES = { "ISO-IR-15" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x40, 0x5B, 0x5C, 0x5D, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA3, 0xA7, 0xB0, 0xE7, 0xE9, 0xF9, 0xE0, 0xF2, 0xE8, 0xEC }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646ITCharset. - */ - public ISO646ITCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646JAOCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646JAOCharset.java deleted file mode 100644 index 96fcbeb..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646JAOCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646JAOCharset class handles the encoding and decoding of the - * ISO646-JAO national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646JAOCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-JAO"; - - static final String[] ALIASES = { "ISO646-JP-OCR-B", "ISO-IR-92" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x5B, 0x5C, 0x5D, 0x60, 0x7E }, - new int[] { 0x2329, 0xA5, 0x232A, -1, -1 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646JAOCharset. - */ - public ISO646JAOCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646JPCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646JPCharset.java deleted file mode 100644 index f705c2e..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646JPCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646JPCharset class handles the encoding and decoding of the - * ISO646-JP national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646JPCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-JP"; - - static final String[] ALIASES = { "ISO-IR-14" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x5C, 0x7E }, - new int[] { 0xA5, 0xAF }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646JPCharset. - */ - public ISO646JPCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646KRCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646KRCharset.java deleted file mode 100644 index 53defcf..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646KRCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646KRCharset class handles the encoding and decoding of the - * ISO646-KR national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646KRCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-KR"; - - static final String[] ALIASES = {}; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x5C }, - new int[] { 0x20A9 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646KRCharset. - */ - public ISO646KRCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646MTCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646MTCharset.java deleted file mode 100644 index ddf89af..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646MTCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646MTCharset class handles the encoding and decoding of the - * ISO646-MT national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646MTCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-MT"; - - static final String[] ALIASES = {}; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x5B, 0x5C, 0x5D, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0x0121, 0x017C, 0x0127, 0x010B, 0x0120, 0x017B, 0x0126, 0x010A }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646MTCharset. - */ - public ISO646MTCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646NO2Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646NO2Charset.java deleted file mode 100644 index c09b3c7..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646NO2Charset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646NO2Charset class handles the encoding and decoding of the - * ISO646-NO2 national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646NO2Charset extends ByteLookupCharset { - - static final String NAME = "ISO646-NO2"; - - static final String[] ALIASES = { "ISO-IR-61" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x23, 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA7, 0xC6, 0xD8, 0xC5, 0xE6, 0xF8, 0xE5, 0x7C }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646NO2Charset. - */ - public ISO646NO2Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646NOCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646NOCharset.java deleted file mode 100644 index 44ef949..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646NOCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646NOCharset class handles the encoding and decoding of the - * ISO646-NO national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646NOCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-NO"; - - static final String[] ALIASES = { "ISO-IR-60" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xC6, 0xD8, 0xC5, 0xE6, 0xF8, 0xE5, 0xAF }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646NOCharset. - */ - public ISO646NOCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646PT2Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646PT2Charset.java deleted file mode 100644 index 76410c2..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646PT2Charset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646PT2Charset class handles the encoding and decoding of the - * ISO646-PT2 national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646PT2Charset extends ByteLookupCharset { - - static final String NAME = "ISO646-PT2"; - - static final String[] ALIASES = { "ISO-IR-84" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x40, 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D }, - new int[] { 0xB4, 0xC3, 0xC7, 0xD5, 0xE3, 0xE7, 0xF5 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646PT2Charset. - */ - public ISO646PT2Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646PTCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646PTCharset.java deleted file mode 100644 index fe22aa6..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646PTCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646PTCharset class handles the encoding and decoding of the - * ISO646-PT national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646PTCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-PT"; - - static final String[] ALIASES = { "ISO-IR-16" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x40, 0x5B, 0x5C, 0x5D, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA7, 0xC3, 0xC7, 0xD5, 0xE3, 0xE7, 0xF5, 0xB0 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646PTCharset. - */ - public ISO646PTCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646SE2Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646SE2Charset.java deleted file mode 100644 index c96706a..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646SE2Charset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646SE2Charset class handles the encoding and decoding of the - * ISO646-SE2 national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646SE2Charset extends ByteLookupCharset { - - static final String NAME = "ISO646-SE2"; - - static final String[] ALIASES = { "ISO-IR-11" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x24, 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0xA4, 0xC9, 0xC4, 0xD6, 0xC5, 0xDC, 0xE9, 0xE4, 0xF6, 0xE5, 0xFC }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646SE2Charset. - */ - public ISO646SE2Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646T61Charset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646T61Charset.java deleted file mode 100644 index 3e4f5b3..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646T61Charset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646T61Charset class handles the encoding and decoding of the - * ISO646-T61 national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646T61Charset extends ByteLookupCharset { - - static final String NAME = "ISO646-T61"; - - static final String[] ALIASES = { "ISO-IR-102" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x24, 0x5C, 0x5E, 0x60, 0x7B, 0x7D, 0x7E }, - new int[] { 0xA4, -1, -1, -1, -1, -1, -1 }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646T61Charset. - */ - public ISO646T61Charset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646TWCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646TWCharset.java deleted file mode 100644 index fb5aecd..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646TWCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646TWCharset class handles the encoding and decoding of the - * ISO646-TW national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646TWCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-TW"; - - static final String[] ALIASES = {}; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x7E }, - new int[] { 0xAF }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646TWCharset. - */ - public ISO646TWCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646USCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646USCharset.java deleted file mode 100644 index 462dea3..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646USCharset.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646USCharset class handles the encoding and decoding of the - * ISO646-US national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646USCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-US"; - - static final String[] ALIASES = { "ISO-IR-6", "ISO_646.irv:1991" }; - - static final int[] BYTE_TO_CHAR; - - static { - BYTE_TO_CHAR = createTable(); - for (int i = 0; i < 128; i++) - BYTE_TO_CHAR[i] = i; - } - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646USCharset. - */ - public ISO646USCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646YUCharset.java b/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646YUCharset.java deleted file mode 100644 index 0dac92f..0000000 --- a/lib/jcharset-2.1/src/main/java/net/freeutils/charset/iso646/ISO646YUCharset.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright © 2005-2019 Amichai Rothman - * - * This file is part of JCharset - the Java Charset package. - * - * JCharset 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. - * - * JCharset 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 JCharset. If not, see . - * - * For additional info see http://www.freeutils.net/source/jcharset/ - */ - -package net.freeutils.charset.iso646; - -import net.freeutils.charset.ByteLookupCharset; - -/** - * The ISO646YUCharset class handles the encoding and decoding of the - * ISO646-YU national variant of the ISO/IEC 646 charset. - * - * @author Amichai Rothman - * @since 2015-08-18 - */ -public class ISO646YUCharset extends ByteLookupCharset { - - static final String NAME = "ISO646-YU"; - - static final String[] ALIASES = { "ISO-IR-141" }; - - static final int[] BYTE_TO_CHAR = mutate(ISO646USCharset.BYTE_TO_CHAR, - new int[] { 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x60, 0x7B, 0x7C, 0x7D, 0x7E }, - new int[] { 0x017D, 0x0160, 0x0110, 0x0106, 0x010C, 0x017E, 0x0161, 0x0111, 0x0107, 0x010D }); - - static final int[][] CHAR_TO_BYTE = createInverseLookupTable(BYTE_TO_CHAR); - - /** - * Constructs an instance of the ISO646YUCharset. - */ - public ISO646YUCharset() { - super(NAME, ALIASES, BYTE_TO_CHAR, CHAR_TO_BYTE); - } - -} diff --git a/lib/jcharset-2.1/src/main/resources/META-INF/services/java.nio.charset.spi.CharsetProvider b/lib/jcharset-2.1/src/main/resources/META-INF/services/java.nio.charset.spi.CharsetProvider deleted file mode 100644 index e97a0bc..0000000 --- a/lib/jcharset-2.1/src/main/resources/META-INF/services/java.nio.charset.spi.CharsetProvider +++ /dev/null @@ -1 +0,0 @@ -net.freeutils.charset.CharsetProvider